经常遇到诡异的问题,换 ubuntu 就没事了。 比如说:
import multiprocessing, time, queue
# g_queue = queue.Queue()
g_queue = multiprocessing.Queue()
c = multiprocessing.cpu_count()
def init_queue():
print("init g_queue start")
while not g_queue.empty():
g_queue.get()
for _index in range(10):
g_queue.put(_index)
print("init g_queue end")
def task_io(task_id):
print("IOTask[%s] start" % task_id)
while not g_queue.empty():
try:
data = g_queue.get(block=True, timeout=1)
print("IOTask[%s] get data: %s" % (task_id, data))
time.sleep(1)
except Exception as excep:
print("IOTask[%s] error: %s" % (task_id, str(excep)))
print("IOTask[%s] end" % task_id)
if __name__ == '__main__':
print("cpu count:", multiprocessing.cpu_count(), "\n")
print("========== 多进程执行 IO 密集型任务 ==========")
init_queue()
time_0 = time.time()
process_list = [multiprocessing.Process(target=task_io, args=(i,)) for i in range(c)]
for p in process_list:
p.start()
for p in process_list:
if p.is_alive():
p.join()
print("结束:", time.time() - time_0, "\n")
完全拿不到 queue 里面的东西,直接当空气了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.