线程不工作

时间:2016-01-24 18:09:55

标签: python multithreading python-3.x

我正在尝试使用以下代码来学习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()

我得到了正确的结果但一个接一个而不是一次。我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

t = threading.Thread(extr(x))是问题所在。您正在调用extr(x),并将结果传递给Thread构造函数。试试Thread(target=extr, args=(x,))

然后,您需要使用类似https://docs.python.org/2/library/queue.html的内容,以允许线程在结束数据终止之前将结果数据传递回主线程。您将在主线程中创建队列,并将其作为参数传递给每个子线程。