我有以下问题。我的线程很少。有只等待终止调用的主线程和上传文件的线程子线程。不幸的是,子线程在想要与特定服务器连接时被阻止。我在 Linux 上使用 python2.7。
主线程包含以下代码:
for i in xrange(n):
upl = UploaderThread(self.user, self.password)
upl.start()
while threading.active_count() > 1:
time.sleep(1000.)
这是子线程挂起的片段
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(glob_timeout)
#this fragment of code is accessed
sock.connect( ("95.211.193.147", 8084 ) ) <- here the child-thread is blocked
#this fragment of code is not accessed anymore
sock.send(header)
我做错了什么?
当我运行同一程序的几个副本时(每个副本都是一个上传线程),一切都很好。这意味着服务器允许来自一个客户端的多个连接。
当没有主线程时一切正常,即当我以这种方式更改主线程时(删除等待循环):
for i in xrange(n):
upl = UploaderThread(self.user, self.password)
upl.start()
然后在主线程死亡后,每个子线程都可以工作(不再被阻塞)。
当我尝试与其他服务器(不是 "95.211.193.147", 8084 )连接时,子线程不会被主线程阻塞。
我真的不明白发生了什么。
UploaderThread的定义
class UploaderThread(threading.Thread):
def __init__(self, user, password):
threading.Thread.__init__(self)
self.uploader = Uploader(user, password)
self.daemon = False
def run(self):
self.uploader.upload_dir()
self.uploader.upload_dir() 包含与服务器连接的代码片段。