多处理打印语句在 Spyder 中不起作用 IDE
Multiprocessing print statement doesn't work in Spyder IDE
在机器 运行 Windows Server 2012 R2 中,在来自 Anaconda 的 Spyder IDE 和 运行 Python 3.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('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
我得到了输出
name is main
Program completed in 0.13s
Goodbye!
我的期望是我会看到两个打印语句
func start
func end
而且(因为调用了 .join)程序需要 >1 秒才能完成。
我怀疑 .start() 调用没有成功调用 do_something 函数。
仅供参考,我正在关注 this tutorial, which I know needs to be modified to include the if statement on windows. I am also seeing similar code 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('\n\nProgram 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('\n\nProgram 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('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
输出:
name is main
func start
func end
Program completed in 1.33s
Goodbye!
在机器 运行 Windows Server 2012 R2 中,在来自 Anaconda 的 Spyder IDE 和 运行 Python 3.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('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
我得到了输出
name is main
Program completed in 0.13s
Goodbye!
我的期望是我会看到两个打印语句
func start
func end
而且(因为调用了 .join)程序需要 >1 秒才能完成。
我怀疑 .start() 调用没有成功调用 do_something 函数。
仅供参考,我正在关注 this tutorial, which I know needs to be modified to include the if statement on windows. I am also seeing similar code 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('\n\nProgram 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('\n\nProgram 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('\n\nProgram completed in '+str(round((finish-start),2))+'s')
print('Goodbye!')
输出:
name is main
func start
func end
Program completed in 1.33s
Goodbye!