gpt4 book ai didi

python - python中的多线程 - 阻止调用在后台运行

转载 作者:太空狗 更新时间:2023-10-30 02:47:53 25 4
gpt4 key购买 nike

我最近一直在开发一个程序(正如您可能从我之前提出的问题中看到的那样),但我在理解和实现多线程方面遇到了真正的麻烦。

我按照教程 ( binary tides ) 设置了 UDP 服务器,效果很好。然而,我遇到的问题是,当我在新线程上创建阻塞 UDP 套接字时,我在最初创建线程的主程序中的代码不起作用。这是我的一些代码:

主要.py:

from thread import*
import connections


start_new_thread(networkStart.startConnecton())
print 'This should print!'

网络启动.py:

def startConnecton():
userData.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
try:
userData.s.bind((HOST, PORT))
except socket.error, msg:
print 'Bind failed. Error code: ' +str(msg[0]) + 'Message' +msg[1]
sys.exit()
print 'Socket bind complete'
userData.s.listen(10)
# Set the socket to listening mode, if there are more than 10 connections waiting reject the rest
print 'Socket now listening'
#Function for handling connections. Each new connection is handled on a separate thread
start_new_thread(connections.connectionListen())

连接.py:

def connectionListen():
while 1:
print 'waiting for connection'
#wait to accept a connection - blocking call
conn, addr = userData.s.accept()
userData.clients += 1
print 'Connected with ' + addr[0] + ':' + str(addr[1])
#start new thread takes 1st argument as a function name to be run, second is the tuple of arguments
start_new_thread(users.clientthread ,(conn, userData.clients))

我基本上只想在新线程上调用 startConnection 函数后能够执行 main.py 中的任何代码(即,打印此实例中的字符串)。

我已经为这个程序苦苦挣扎了一段时间,Python 对我来说是新手,我发现它非常具有挑战性。我假设我在实现多线程的方式上一定犯了一些错误,我们将不胜感激任何帮助!

最佳答案

start_new_thread 接收一个函数和一个参数列表,但您直接使用函数调用:start_new_thread(networkStart.startConnecton())

但是,我建议您使用具有更高抽象级别的 threading 模块 ( the official documentation does so )。

import threading
import connections

threading.Thread(target=networkStart.startConnecton).start()
print 'This should print!'

关于python - python中的多线程 - 阻止调用在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com