【问题标题】:Run two functions at the same time in Python在 Python 中同时运行两个函数
【发布时间】:2019-11-18 10:59:39
【问题描述】:

这是一个简单的python多线程代码。

p1 = multiprocessing.Process(target=f1, args=('f1')) 
p2 = multiprocessing.Process(target=f2, args=('f2')) 

p1.start() 
# starting process 2 
p2.start() 

# wait until process 1 is finished 
p1.join() 
# wait until process 2 is finished 
p2.join()

但在运行代码后,我收到以下错误:

BrokenPipeError: [Errno 32] 损坏的管道

我搜索了 SO 和其他网站,常见的答案是包含以下 sn-p:

from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)

但是当我运行它时,我收到以下错误:

ImportError: cannot import name 'SIGPIPE' from 'signal' (C:\Users\u65988\AppData\Local\Continuum\anaconda3\lib\signal.py)

我尝试检查所有解决方案,但都没有解决!请帮我解决这个问题!

两个函数供参考:

def f1 (string):
          print(string)

def f2 (string):
          print(string)

【问题讨论】:

  • (1) 这是多处理,而不是多线程。 (2) f1 和 f2 是如何定义的? (3) 你必须在 Windows 上使用if __name__ == "__main__"(参见文档)
  • 嗯,错误说明signal 有问题,在mac 上,这些导入运行得很好。在 windows 上似乎是这个包的问题,​​检查这个issue
  • 你的代码是如何运行的?
  • @MichaelButscher 我试过(3),但它仍然显示相同的错误。 Siddhant:我尝试了该问题的解决方案,但仍然无法正常工作。 Stovfl:对我来说,它抛出了错误,我尝试寻找解决方案,到处都写的通用解决方案是添加这些行,这就是我尝试添加它的原因。 AdamGold:我正在使用 Anaconda 在 Spyder 上运行代码。执行从“ if name__==__main”开始。我只是尝试了一个基本代码来了解多处理是否有效。但不幸的是,这个错误似乎没有消失。

标签: python multiprocessing sigpipe


【解决方案1】:

在你想运行的 main.py/script 中,你必须写

if __name__ == "__main__":

    start_process_1()

    start_process_2()


    join_process_1()

    join_process_2()

这是一个特定于 Windows 平台的错误,如果函数调用被包装/放入 if__name__ == "__main__" 中,则会相应地解决。

【讨论】:

  • 非常感谢!代码现在正在运行!但是打印中的语句仍然没有打印。你能告诉我为什么会这样吗?
  • 你可以给我代码,我看看。
猜你喜欢
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 2020-09-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多