【发布时间】:2014-10-24 07:44:17
【问题描述】:
我有一个带有线程的 python 代码,如果在例如 1 小时内线程没有完成,我需要完成所有线程并完成脚本,如果这个小时没有完成,请等待我的所有线程完成。
我尝试使用守护线程,并使用一小时的睡眠,如果一小时已完成,请使用:sys.exit() 但它对我不起作用,因为总是等待我的睡眠线程,然后我的脚本等到线程完成,sys.exit() 不起作用。
import socket, threading, time, sys
from sys import argv
import os
acc_time=0
transactions_ps=5
ins = open(sys.argv[1],'r')
msisdn_list = []
for line in ins:
msisdn_list.append (line.strip('\n'))
# print line
ins.close()
def worker(msisdn_list):
semaphore.acquire()
global transactions_ps
print " ***** ", threading.currentThread().getName(), "Lanzado"
count=1
acc_time=0
print "len: ",len(msisdn_list)
for i in msisdn_list:
try:
init=time.time()
time.sleep(2)
print "sleeping...",i
time.sleep(4)
final=time.time()
acc_time = acc_time+final-init
print acc_time
except IOError:
print "Connection failed",sys.exc_info()[0]
print "Deteniendo ",threading.currentThread().getName()
semaphore.release()
def kill_process(secs_to_die):
time.sleep(secs_to_die)
sys.exit()
seconds_to_die=3600
thread_kill = threading.Thread(target = kill_process, args=(seconds_to_die,))
thread_kill.start()
max_con=5
semaphore = threading.BoundedSemaphore(max_con)
for i in range(0,28,transactions_ps):
w = threading.Thread(target=worker, args=(msisdn_list[i:i+transactions_ps-1],))
w.setDaemon(True)
w.start()
怎么办
【问题讨论】:
-
这段代码对我来说很好——它会等到
secs_do_die过去,然后整个脚本退出。这是您使用的实际代码吗? -
with open(sys.argv[1]) as file: msisdn_list = file.read().splitlines()
标签: python multithreading thread-safety subprocess