python multiprocess不加入pycharm

时间:2017-06-20 16:12:05

标签: python pycharm multiprocess

在pycharm中使用multiprocess运行代码时遇到问题。

简单地说,代码创建一个进程列表,启动每个进程,然后加入每个进程:

import multiprocess as mp
processes = []
strings = ["abc", "cde", "fgh"]

def some_function(s: str, queue: mp.Queue):
    queue.put(s.split(""))

queue = mp.Queue()
for s in strings:
    processes.append(mp.Process(target=some_function, args=(s,queue))
[process.start() for process in processes]
[process.join() for process in processes]

# some more code

我想我在某个地方读过这个sintax,我正在研究python 3.6。

问题是程序似乎没有加入进程,但在启动它们之后直接跳转到# some more code部分。我在另一个项目中使用了类似的sintax并且它有效(唯一的区别是在我开始的其他代码中加入了第一个进程,然后加入了所有其他代码)。

我在PyCharm交互式控制台中运行代码。至少在我看来,更令人惊讶的是,如果我在调试中运行代码,它会按预期工作。

知道为什么会这样吗?

更新

按照建议尝试使用池,这里是代码:

import multiprocess as mp
strings = ["abc", "cde", "fgh"]

def some_function(s: str, queue: mp.Queue):
    queue.put(s.split(""))

queue = mp.Manager().Queue()
pool = mp.Pool(mp.cpu_count()-1)
pool.starmap(some_function, [(string, queue) for string in strings])
pool.close()
pool.join()

# some more code

它看起来更干净,但它仍然提供相同的错误,也就是说,它在调试中工作,但在运行时它不会等待所有进程加入。

UPDATE_2

发现一个小错误,当它从终端运行时看起来不起作用,现在它可以从终端(两个版本)运行。

修复错误后,第一个版本(没有池)在运行时正常工作,正如预期的那样,版本仍然没有(仅适用于终端,但速度稍快)。

如果有人发现为什么答案仍然受到赞赏。我已经在intellj网站上询问了

0 个答案:

没有答案