【发布时间】:2016-11-11 16:01:02
【问题描述】:
我正在尝试使用可以在线程/进程完成任务时附加的全局列表。我的主线程可以从中读取,但不能通过函数附加它。基本上我提出请求以获取工作代理,然后尝试将它们保存到列表中,然后在最后打印列表。我已经尽可能地剪掉了。
goodProxyList = ["test"]
def testProxy(x):
global goodProxyList
try:
test = requests.get('http://someurl.com/', proxies=proxies, timeout=10)
if test.status_code == 200:
goodProxyList.append(x)
else:
print("Something went wrong! :/" + " From PID: " + str(pid))
except:
print("SOMETHING WENT VERY WRONG" + " From PID: " + str(pid))
if __name__ == '__main__':
##Setup Stuff happens
p=Pool(2)
p.map(testProxy, proxyList)
for i in goodProxyList:
print(i)
即使我将 goodProxyList.append(x) 更改为 goodProxyList.append("Anything"),最后两行仍然不会输出“test”。我做错了什么?
编辑:
我通过 brianpck 的帮助找到了答案。正如他所说,似乎进程的工作方式与线程不同。我更改为池线程现在可以完美运行。
#p=Pool(2)
#p.map(testProxy, proxyList)
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(testProxy, proxyList)
【问题讨论】:
-
你是什么意思,“不能附加到它”?这应该可以正常工作(实际上甚至没有必要明确声明
global goodProxyList) -
对不起,我应该说最后两行的输出仍然只是“测试”,没有别的。
-
@brianpck 要附加到函数范围之外的变量/列表,您必须声明
global goodProxyList。 -
@r0xette 不适用于
list:尝试x=[],def f(): x.append(1),f():x == [1]函数范围外 -
Pool()会发生什么?
标签: python list python-3.x append global