0

我一直在尝试使用线程发出多个 HTTP 请求。

首先,我有一个调用 API 的方法,该方法将 dict 作为参数并返回 JSON 对象。此外,当我在没有线程的情况下运行它时,它工作得非常好。但是,这是我在尝试使用线程时得到的代码和错误。

import sys
sys.path.append(r'C:/dict/path')
import apiModule
import threading

token = 'xxxx'
apiModule = apiModule.Module(token)

urls = [{'url': 'http://www.example.com'}, {'url': 'http://www.example.com/2'}]

data = []

for element in urls:
    thread = threading.Thread(target=apiModule.method(),kwargs=element)
    thread.start()
    data.append(thread)

Traceback (most recent call last):
  File "<pyshell#72>", line 2, in <module>
    thread = threading.Thread(target=apiModule.method(),kwargs=element)
  File "C:/dict/path", line 54, in method
    return json.loads(r.content)
  File "C:\Python27\lib\json\__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 384, in raw_decode
     raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

任何帮助,将不胜感激!

4

1 回答 1

0

扩展@falsetru 的回复:根据线程文档

targetrun()是方法调用的可调用对象

在您的示例中,您通过target=apiModule.method(),立即调用方法" method" on apiModule。这会引发您看到的错误。目前,代码甚至没有到达thread.start()呼叫。

于 2013-07-12T07:39:56.613 回答