出错代码:
if __name__ == '__main__':
ip_arr=get_ip_list()
pool=Pool(processes=4)
for temp in ip_arr:
res = pool.apply_async(check_ip,(temp,)).get()
if res :
ip_list.append(res )
pool.close()
pool.join()
print(arr)
这段代码运行会发现是阻塞运行的
原因是apply_async后面 get()等待线程运行结束才会下一个
而apply_async刚好又是异步以主程序为主的,所以这段代码实际变成了阻塞
改成:
if __name__ == '__main__':
ip_arr=get_ip_list()
pool=Pool(processes=4)
for temp in ip_arr:
arr.append(pool.apply_async(check_ip,(temp,)))
pool.close()
pool.join()
ip_list=[]
for temp in arr:
if temp.get():
ip_list.append(temp.get())
print(ip_list,len(ip_list))
当然有更好的方法来获取他的返回值,只是这个方法比较方便~