multiprocessing无法使用
程序不会进入Process中,命令行运行报错如下:RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
StackOverFlow上的方案如下(我试了没成功)
stackoverflow
测试代码:
import multiprocessing
import parallelTestModule
def run(name):
print('%s runing' %name)
time.sleep(random.randrange(1,5))
print('%s running end' %name)
p1=multiprocessing.Process(target=run,args=('anne',)) #必须加,号
p2=multiprocessing.Process(target=run,args=('alice',))
p3=multiprocessing.Process(target=run,args=('biantai',))
p4=multiprocessing.Process(target=run,args=('haha',))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
print('主线程')
多进程好像有个很大的坑,必须要在if __name__ == '__main__':下运行,否则就报错,所以之前打算用多进程的,结果图形界面上打包也有坑,最后还是用了多线程来做
import multiprocessing
import time
import random
def run(name):
print('%s runing' % name)
time.sleep(random.randrange(1, 5))
print('%s running end' % name)
if __name__ == '__main__':
p1 = multiprocessing.Process(target=run, args=('anne',))# 必须加,号
p2 = multiprocessing.Process(target=run, args=('alice',))
p3 = multiprocessing.Process(target=run, args=('biantai',))
p4 = multiprocessing.Process(target=run, args=('haha',))
p1.start()
p1.join()
p2.start()
p2.join()
p3.start()
p3.join()
p4.start()
p4.join()
print('主线程') 试试把 start() 方法换成 run()
再不行把 阻塞去了运行一遍
我刚才也遇到了类似的问题{:10_256:}{:10_256:}{:10_256:} 添加一下,发现进程间的通信似乎用线程才能调用 start() 方法# from multiprocessing import Process
from queue import Queue
from time import sleep
from threading import Thread
def download(q):
images = ["girl.png", "boy.png", "man.png"]
for image in images:
print("开始下载图片:{}".format(image))
sleep(0.5)
q.put(image)
def getfile(q):
while True:
try:
file = q.get(timeout=2)
print("图片:{} 下载成功...".format(file))
except:
break
if __name__ == '__main__':
q = Queue(5)
# p1 = Process(target=download, args=(q,))
# p2 = Process(target=getfile, args=(q,))
# p1.run()
# p2.run()
t1 = Thread(target=download, args=(q,))
t2 = Thread(target=getfile, args=(q,))
t1.start()
t2.start()
t1.join()
t2.join()
小莫非 发表于 2020-9-16 05:59
添加一下,发现进程间的通信似乎用线程才能调用 start() 方法
可以尝试跑一边代码我也是看了不下10遍教程才发现这个问题,真的是一看就会,一敲就废 疾风怪盗 发表于 2020-9-16 00:23
多进程好像有个很大的坑,必须要在if __name__ == '__main__':下运行,否则就报错,所以之前打算用多进程的 ...
仍然不行 本帖最后由 疾风怪盗 于 2020-9-16 13:00 编辑
Unicorn# 发表于 2020-9-16 12:55
仍然不行
我这没问题啊,你的报错提示是什么? 疾风怪盗 发表于 2020-9-16 12:58
我这没问题啊,你的报错提示是什么?
你是mac或者linux吗
只有win才有这个问题 Unicorn# 发表于 2020-9-16 13:29
你是mac或者linux吗
只有win才有这个问题
win10+python3.8.3 疾风怪盗 发表于 2020-9-16 13:32
win10+python3.8.3
报错上面说了 Unicorn# 发表于 2020-9-16 17:03
报错上面说了
?在哪里?
你的报错提示是什么?有没有用我2楼回复的代码?
我这里代码运行没问题 疾风怪盗 发表于 2020-9-16 17:12
?在哪里?
你的报错提示是什么?有没有用我2楼回复的代码?
我这里代码运行没问题
不是报错,只是警告(shell运行连警告都没有)
用过你的代码 不行 Unicorn# 发表于 2020-9-16 17:24
不是报错,只是警告(shell运行连警告都没有)
用过你的代码 不行
{:10_284:}行吧,我这边运行是正常的,没任何问题,说明代码没问题的
页:
[1]