Rhy*_*hys 4 python multiprocessing python-3.x
我是多处理新手
我已经为两个"强烈推荐"的多处理示例运行了示例代码,以响应其他stackoverflow多处理问题.这是一个例子(我不敢再跑了!)
test2.py(从pydev运行)
import multiprocessing
class MyFancyClass(object):
def __init__(self, name):
self.name = name
def do_something(self):
proc_name = multiprocessing.current_process().name
print(proc_name, self.name)
def worker(q):
obj = q.get()
obj.do_something()
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=worker, args=(queue,))
p.start()
queue.put(MyFancyClass('Fancy Dan'))
# Wait for the worker to finish
queue.close()
queue.join_thread()
p.join()
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我的计算机很快就会慢下来.它逐渐变慢.过了一段时间,我设法进入任务管理器只看到进程选项卡下的许多许多python.exe.在尝试结束某些过程后,我的鼠标停止移动.这是我第二次被迫重启.
我太害怕尝试第三个例子......
运行 - 英特尔(R)酷睿(TM)i7 CPU 870 @ 2.93GHz(8个CPU),win7 64上约2.9GHz
如果有人知道这个问题是什么,并且可以提供一个非常简单的多处理示例(发送字符串也是一个多进程) ,改变它并将其送回打印)我将非常感激.
来自文档:
确保新的Python解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程).
因此,在Windows上,您必须将代码包装在一个
if __name__=='__main__':
Run Code Online (Sandbox Code Playgroud)
块.
例如,这会向工作进程发送一个字符串,字符串被反转,结果由主进程打印:
import multiprocessing as mp
def worker(inq,outq):
obj = inq.get()
obj = obj[::-1]
outq.put(obj)
if __name__=='__main__':
inq = mp.Queue()
outq = mp.Queue()
p = mp.Process(target=worker, args=(inq,outq))
p.start()
inq.put('Fancy Dan')
# Wait for the worker to finish
p.join()
result = outq.get()
print(result)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3741 次 |
| 最近记录: |