gpt4 book ai didi

python - python 中的多处理 - UnboundLocalError : local variable 'data' referenced before assignment

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:06 24 4
gpt4 key购买 nike

我正在尝试访问一个返回一组产品的 API。由于执行速度很慢,我希望可以使用多处理来使其更快。使用简单的 for 循环访问时,API 可以完美运行。

这是我的代码:

from multiprocessing import Pool
from urllib2 import Request, urlopen, URLError
import json

def f(a):
request = Request('API'+ str(a))
try:
response = urlopen(request)
data = response.read()
except URLError, e:
print 'URL ERROR:', e
s=json.loads(data)
#count += len(s['Results'])
#print count
products=[]
for i in range(len(s['Results'])):
if (s['Results'][i]['IsSyndicated']==False):
try:
products.append(int(s['Results'][i]['ProductId']))
except ValueError as e:
products.append(s['Results'][i]['ProductId'])
return products

list=[0,100,200]

if __name__ == '__main__':
p = Pool(4)
result=p.map(f, list)
print result

这是错误信息:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\z080302\Desktop\WinPython-32bit-2.7.6.3\python-2.7.6\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/z080302/Desktop/Python_Projects/mp_test.py", line 36, in <module>
result=p.map(f, list)
File "C:\Users\z080302\Desktop\WinPython-32bit-2.7.6.3\python-2.7.6\lib\multiprocessing\pool.py", line 250, in map
return self.map_async(func, iterable, chunksize).get()
File "C:\Users\z080302\Desktop\WinPython-32bit-2.7.6.3\python-2.7.6\lib\multiprocessing\pool.py", line 554, in get
raise self._value
UnboundLocalError: local variable 'data' referenced before assignment

我在想即使使用多处理函数仍然会按顺序执行。那么,为什么我会得到 UnboundLocalError

最佳答案

在这段代码中:

try:
response = urlopen(request)
data = response.read()
except URLError, e:
print 'URL ERROR:', e

如果 urlopen 抛出一个 URLError 异常,以下行 (data = response.read() 永远不会执行。所以当你来到:

s=json.loads(data)

变量data 从未被赋值。您可能希望在发生 URLError 时中止处理,因为这表明您将没有任何 JSON 数据。

关于python - python 中的多处理 - UnboundLocalError : local variable 'data' referenced before assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com