我正在尝试使用以下代码来学习python中的线程。
import urllib.request
import re
import threading
from sys import argv, exit
if len(argv[1:])==0:
exit("You haven't entered any arguments. Try again.")
else:
comps=argv[1:]
def extr(comp):
url = 'http://finance.yahoo.com/q?s='+comp
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req)
respData = resp.read()
print (re.findall(r'<span id="yfs_l84_[^.]*">(.*?)</span>',str(respData)))
for x in comps:
t = threading.Thread(extr(x))
t.daemon = True
t.start()
我得到了正确的结果但一个接一个而不是一次。我错过了什么吗?
答案 0 :(得分:3)
t = threading.Thread(extr(x))
是问题所在。您正在调用extr(x)
,并将结果传递给Thread构造函数。试试Thread(target=extr, args=(x,))
。
然后,您需要使用类似https://docs.python.org/2/library/queue.html的内容,以允许线程在结束数据终止之前将结果数据传递回主线程。您将在主线程中创建队列,并将其作为参数传递给每个子线程。