多处理打印语句在Spyder IDE中不起作用

Multiprocessing print statement doesn#39;t work in Spyder IDE(多处理打印语句在Spyder IDE中不起作用)
本文介绍了多处理打印语句在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!

这篇关于多处理打印语句在Spyder IDE中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)