多处理打印语句在Spyder IDE中不起作用
问题描述
在运行Windows Server 2012 R2的计算机上,从Anaconda在Spyder IDE中使用以下代码运行Python3.7:
import time
import multiprocessing
start=time.perf_counter()
def do_something():
print('func start')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('
Program completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
我得到了输出
名称为Main
程序在0.13秒内完成
再见!
我的预期是我会看到两个打印语句
函数启动
函数结束
并且(因为.Join被调用)该程序将需要>1秒才能完成。
我怀疑.start()调用没有成功调用do_omething函数。
仅供参考,我正在关注this tutorial,我知道它需要修改以包括Windows上的if语句。我也看到类似的代码on other sites,但似乎在我这一端不起作用。如有任何有关故障排除的建议,我们将不胜感激。
**编辑:根据来自Azy_Crw4282的下面的评论,代码似乎在他那端工作,根据他的建议,它似乎在cmd提示符下工作。因此,这似乎是Spyder IDE的一个特别错误。 仅供参考,我想知道问题是进程正在启动,但IDE没有捕获输出,还是进程没有启动。我尝试了两种方法,1)下面的代码将数据帧写入CSV。在多处理函数中执行此操作时,它不会写入文件。2)我创建了一个全局变量,并更改了函数中的变量值。Spyder在代码运行后保留变量值,而当我打印变量时,它没有变化。总之,Spyder IDE似乎不能与多处理模块一起工作。**
import time
import multiprocessing
start=time.perf_counter()
df=pd.DataFrame(data={'Col1':[1.1,2.1,3.1],
'Col2':[1.2,2.2,3.2],
'Col3':[1.3,2.3,3.3]}, columns=['Col1','Col2','Col3'])
def do_something():
print('func start')
df.to_csv('C:/testMp.csv')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('
Program completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
解决方案
当我运行您的代码时,我得到以下输出。您是否可以尝试在其他ide/cmd行/终端中运行代码?
import multiprocessing
start=time.perf_counter()
def do_something():
print('func start')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('
Program completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
输出:
name is main
Program completed in 0.0s
Goodbye!
func start
func end
Program completed in 1.27s
Goodbye!
上述结果可能与您预期的不同。为了达到您想要的效果,您需要缩进外部打印部分,以便它出现在主调用中。
import time
import multiprocessing
start=time.perf_counter()
def do_something():
print('func start')
time.sleep(1)
print('func end')
if __name__=='__main__':
print('name is main')
p1=multiprocessing.Process(target=do_something)
p1.start()
p1.join()
finish=time.perf_counter()
print('
Program completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
输出:
name is main
func start
func end
Program completed in 1.33s
Goodbye!
相关文章