为什么我的工作线程没有使用python多线程生成

时间:2018-11-05 11:00:25

标签: python multithreading

我正在尝试侦听端口的基本服务器程序,并且对于每个传入请求,它都会生成新的守护程序线程并继续执行。以前类似的代码曾经可以工作,但是现在这东西不起作用了。

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...。为什么永远不会生成守护线程?在您的计算机上是否表现相同?如果是,为什么?

1 个答案:

答案 0 :(得分:0)

我以完全相同的顺序在机器上测试了完全相同的代码,对我来说看起来不错。我先运行server.py,然后运行client.py,并得到了预期的答案。

请确保您正在从不同的终端运行两个脚本,并确保已使用的端口在使用后被释放,因为如果您未正确结束/杀死进程,端口可能会很忙(fuser命令有效如果在Linux中,请查看this answer)。因此,尝试使用另一个端口号应该可以。

在下面的链接中,您可以看到我第一次启动客户端脚本前后的服务器终端的图片。

Terminal Results