您好我正在尝试在python中执行2个线程。这些线程使urllib2请求在不同的域上运行php文件,但是当我这样做时,只运行其中一个。我怎么能让他们两个都跑?感谢
import urllib2, threading
archivin=open("data.txt","r")
class hilo(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for x in archivin.readlines():
try:
url=urllib2.urlopen("http://www.mysite1.com/utils.php?data="+x.split(", ")[1])
except:
continue
class hilo2(threading.Thread):
def run(self):
for x in archivin.readlines():
try:
url2=urllib2.urlopen("http://www.mysite2.com/utils.php?data="+x.split(", ")[1])
except:
continue
mi_hilo1=hilo()
mi_hilo1.start()
mi_hilo2=hilo2()
mi_hilo2.start()
答案 0 :(得分:0)
我认为问题不在于线程本身。
您正在两个位置读取同一archivin
个文件的所有行而不“倒回”它。
如果我尝试两次读取文件,这就是我的电脑中发生的情况。
>>> f=open("virtuoso_hX2016.ini", 'r')
>>> f.tell()
0
>>>
>>> [x for x in f.readlines()]
['[Database]\n',
'DatabaseFile='MaxDirtyBuffers=1333\n', 'SchedulerInterval=5\n',
'FreeTextBatchSize=1000\n', 'CheckpointInterval=10\n',
[ . . . ]
'MinAutoCheckpointSize=200000\n', '\n', '[I18N]\n', 'XAnyNormalization=3\n']
>>> f.tell()
981
>>> [x for x in f.readlines()]
[]
如果你看到,第二个readlines
返回一个空列表。那是因为第一次读取将virtuoso_hX2016
文件偏移设置为文件的末尾(它“全部消耗”)。另外,请看第一个tell()
电话?它说0
因为文件偏移是“指向”到文件的开头。读取文件后,第二个tell()
说981
,因为它指向文件的末尾(第一个读取“消耗”所有文件)
在您的特定情况下,我建议(如果文件的大小相当小)在启动线程之前读取文件内容并将内容作为参数传递,或者在每个线程{{{}内执行文件打开/读取1}}方法。