3
我有以下问题。我有几个线程。有主线程只等待终止呼叫和线程 - 上传文件的子节点。不幸的是,当他们想要与特定服务器连接时,子线程被阻塞。 我在Linux上使用python2.7。Python多线程 - 主线程块socket.connect
主线程包含此代码:
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()的
定义包含代码段与连接到服务器。
如果子线程逐个执行,也许套接字服务器不是多线程 – xiaowl 2012-08-05 11:43:15
事情是,当我只起诉一个线程上传一切都OK。如果多于每个子线程都被阻塞在那个地方。 当我启动子线程后删除主线程,然后一切正常。但我想保持主线程。 – Anonim33 2012-08-05 11:50:06
这是GIL做它的事情吗?你知道线程是如何在Python中工作的,是的?一次只能运行一个线程,并且GIL在特定时间将控制权交给不同的线程。 – 2012-08-05 12:01:50