# -*- coding: utf-8 -*-
from multiprocessing import Pool
import os, time, random
def worker(msg, ip):
t_start = time.time()
print("%s 开始执行, ip:%s, 进程号为%d" % (msg['id'], ip['ip'], os.getpid()))
time.sleep(random.random() * 2)
# time.sleep(2)
t_stop = time.time()
print(msg['id'], "执行完毕, ip:%s, 耗时%0.2f" % (ip['ip'], t_stop - t_start))
def start(d):
po = Pool(10)
a_list = [
{"ip": "ip - 1"},
{"ip": "ip - 2"}
]
d_list = d
for_times = 0
while len(d_list) > 0:
print("第 %s 次" % (for_times))
x = 0
for i in d_list:
if x < 2:
po.apply_async(worker, (i, a_list[for_times]))
d_list.pop(x)
x+=1
else:
print("==============")
break
for_times += 1
print("----start----")
po.close()
po.join()
print("----end----")
if __name__ == '__main__':
d = [{
"id": 1,
"keyword": "site:www.aaa.com 灯",
"site": "www.aaa.com"
}, {
"id": 2,
"keyword": "site:www.bbb.com 灯",
"site": "www.bbb.com"
}, {
"id": 3,
"keyword": "site:www.ccc.com 灯",
"site": "www.ccc.com"
}, {
"id": 4,
"keyword": "site:www.ddd.com 灯",
"site": "www.ddd.com"
}]
start(d)
这段代码没问题。可是会报错;我 debug 了。就是 for 里面的 if 的问题。
理论上 whlie 两次就结束了。可是为啥这里 whlie 走了三次呢?
while 第二次的时候,会看到 for 里面的 if 没生效了。
这是不是 python 的 bug ?
我已经排两天。无结果。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.