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

标签 python python-multiprocessing

我正在尝试访问一个返回一组产品的 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/

相关文章:

python - 如何使我的Discord机器人播放YouTube上的音频

python - super(Foo, self) 和 super(Foo, self.__class__) 的区别?

python - 将 csv 中的行拆分为多个标题行

python - 使用 Django rest 框架跨微服务共享数据库关系

Python多处理: abort map on first child error

python - 在多进程中使用一张图运行 tensorflow

python - 如何使用 mysaldb 插入 mysql 表,其中表名在 python 变量中?

python - 在 Python 多处理中的池进程之间传递消息

python - 单击按钮时如何更改日期?

multithreading - 在多处理过程中使用队列是否使用酸洗?