为啥我的工作线程没有使用 python 多线程产生
Posted
技术标签:
【中文标题】为啥我的工作线程没有使用 python 多线程产生【英文标题】:Why my worker thread is not spawning using python multithreading为什么我的工作线程没有使用 python 多线程产生 【发布时间】:2019-04-08 17:37:35 【问题描述】:我正在尝试侦听端口的基本服务器程序,并且对于每个传入请求,它都会生成新的守护线程并继续执行。以前类似的代码曾经可以工作,现在这个东西不工作了。
server.py
import multiprocessing as mu
from time import sleep
from random import random
import socket
def worker():
while(True):
print("Inside worker....")
sleep(2)
socketObj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ("127.0.0.1", 8080)
socketObj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
socketObj.bind(server_address)
socketObj.listen(10)
while(True):
print("Listening...")
data_socket, client_address = socketObj.accept()
a = data_socket.recv(9000)
p = mu.Process(target=worker, args=())
p.daemon = True
p.start()
client.py
import socket
s = "dummydata"
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(('127.0.0.1', 8080))
socket.send(str.encode(s))
我先运行服务器,然后运行客户端。不知何故,它不断为每个请求打印Listening...
(实际上它有时会打印两次)并且从未打印过Inside worker...
。为什么守护线程永远不会产生?它在您的机器上的行为是否相同?如果是,为什么?
【问题讨论】:
无法复制,在我的电脑上运行良好。 它是否在您的机器上打印Inside worker...
?
是的,内部工人
【参考方案1】:
我在我的机器上以完全相同的顺序测试了与您完全相同的代码,这对我来说看起来不错。我先运行server.py
,然后运行client.py
,得到了预期的答案。
请确保您从不同的终端运行这两个脚本,并且您使用的端口在使用后被释放,因为如果您没有正确结束/终止进程,端口可能会保持忙碌(fuser
命令在Linux,看this answer)。因此,尝试使用另一个端口号应该可以。
在下面的链接中,您可以看到我第一次启动客户端脚本之前和之后的服务器终端图片。
【讨论】:
哦,不知道我的 Windows 机器出了什么问题。刚刚将其移至 Ubuntu 并开始工作:\以上是关于为啥我的工作线程没有使用 python 多线程产生的主要内容,如果未能解决你的问题,请参考以下文章