gpt4 book ai didi

python - 交互式 Python 中的多处理包

转载 作者:太空狗 更新时间:2023-10-30 00:02:39 24 4
gpt4 key购买 nike

我有以下代码test.py:

#multiprocessing in the interactive Python 

import time
from multiprocessing import Process, Pipe

def MyProcess(a):

while(1):
time.sleep(1)
a.send("tic")

if __name__ == "__main__":

a, b = Pipe()

p = Process(target=MyProcess, args=(a,))
p.start()

while(1):
msg=b.recv()
print(msg)

如果我在 DOS shell "python test.py"中执行它,它工作正常但如果我使用 IEP (Pyzo) 中的“执行文件”,它就不起作用。

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\pyzo2014a_64b\lib\multiprocessing\spawn.py", line 106, in spawn_main
exitcode = _main(fd)
File "C:\pyzo2014a_64b\lib\multiprocessing\spawn.py", line 116, in _main
self = pickle.load(from_parent)
AttributeError: Can't get attribute 'MyProcess' on <module '__main__' (built-in)>

我发现这是一个记录在案的“问题”。请检查以下链接的答案。

multiprocessing breaks in interactive mode

这是否意味着我不应该使用交互式 Python 中的多处理包?这是否意味着我无法从 IPython 控制台创建进程?对此的任何澄清将不胜感激

最佳答案

正确,您不能在解释器中使用multiprocessing……主要是因为pickle 不知道如何序列化交互函数。但是,如果您使用名为 pathos.multiprocessingmultiprocessing 分支,您可以从解释器中执行您想要的操作。这是有效的,因为 pathos.multiprocessing 使用 dill,并且 dill 知道如何序列化在解释器中定义的函数(和其他对象)。

>>> from pathos.multiprocessing import ProcessingPool as Pool
>>>
>>> p = Pool(4)
>>> def squared(x):
... return x**2
...
>>> def pow(x,y):
... return x**y
...
>>> a = range(10)
>>> b = range(10,0,-1)
>>>
>>> p.map(squared, a)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> res = p.amap(pow, a, b)
>>> print "asynchronous, and with multiple inputs!"
asynchronous, and with multiple inputs!
>>> res.get()
[0, 1, 256, 2187, 4096, 3125, 1296, 343, 64, 9]

在此处获取 pathos:https://github.com/uqfoundation

关于python - 交互式 Python 中的多处理包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com