作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下问题。我的线程很少。有只等待终止调用的主线程和上传文件的子线程。不幸的是,子线程在想要连接特定服务器时被阻塞。我在 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)
我做错了什么?
当我运行同一个程序的几个副本时(每个副本都是一个上传线程)一切正常。这意味着服务器允许来自一个客户端的多个连接。
没有主线程时一切正常IE。当我以这种方式更改主线程时(删除等待循环):
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() 包含与服务器连接的代码片段。
最佳答案
您可能想考虑使用多处理库而不是线程。它有一些限制,但它回避了 GIL 问题。
关于Python多线程——主线程 block socket.connect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816089/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!