我需要修改list
,通過在線程末尾添加一些元素。如何修改線程內的列表?
這是我的代碼:
def go():
while queueCommand.qsize() > 0:
command = queueCommand.get(False)
res = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True)
output = res.communicate()
output = str(output)
star = output.find("address") + 8
en = output.find(",")
ip = output[star:en-3]
alist.append(ip) #<================== her i use the liste
if __name__ == '__main__':
with open ("icq.txt","r") as myfile:
text = myfile.read()
end = 0
alist = []
queueCommand = Queue.Queue()
while True:
start = text.find("href=") + 13
if start == 12:
break
end = text.find("/",start)
if text[start:end].find("icq.com") != -1:
hostname="host "+ text[start:end]
queueCommand.put(hostname)
text = text[end:len(text)]
for i in range(10):
threading.Thread(target=go,args=(alist)).start() #<====== i give the list as argument
print alist
最後一個print語句顯示一個空的列表,[]
。有任何想法嗎?
你需要有一些同步,可能與互斥體。 –
我可以有一個使用啞巴的例子,我很抱歉,但我是新的python – user3383192
地方alist = []之外的main,在你的go()函數之上,然後在main中使用它。我建議你在實例化隊列時做同樣的事情; queueCommand = Queue.Queue()。如果在線程類中使用它並定義一個單獨的函數來讀取文件,它可能會更容易。這是一個鏈接到一個可能是有用的SO答案http://stackoverflow.com/questions/6286235/multiple-threads-in-python – user1749431