Python 线程 运行 创建时,而不是调用 运行() 时
Python Threads Run When Created, Not When run() is Called
在我的 python 程序 (2.7) 中,我尝试创建一个线程,但它在创建时立即启动,而不是在 start() 和 运行() 属性是叫。帮助会很棒。
这是我的(服务器)代码:
import sys
import socket
import threading
global connections
connections = []
def srcv(s, conn, data):
while True:
print "Recieving"
#Recieve Strings From Each Connection
for i, n in enumerate(connections):
data.append([connections[1], i.recv(4096)])
#Send String To Each Connection
print "Sending"
for i, n in enumerate(connections):
i.send("{0}: {1}".format(data[n][0], data[n][1]))
def listn(s, conn, data):
s.listen(10)
print "Listening For Connection"
while True:
obj, addr = s.accept()
connections.append([obj, addr])
def start_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = []
data = []
s.bind(("localhost", 12345))
print "Creating Listening Thread"
listen = threading.Thread(target=listn(s,conn,data))
print "Preparing Listening Thread"
listen.start()
print "Starting Listening Thread"
listen.run()
print "Creating Send/Receive Thread"
sandr = threading.Thread(target=srcv(s, conn, data))
print "Preparing Send/Receive Thread"
sandr.start()
print "Connections Now Acceptable"
sandr.run()
if __name__ == '__main__':
sys.exit(start_server())
如果我的代码看起来像 clunky/disorganized,请告诉我,总体而言,我对编程有些陌生。
编辑:
我遇到的另一个问题是我不能运行 两个线程,因为当一个线程启动时,另一个线程不能。为什么会这样,我该如何解决?
您需要将参数放在 args=
中,这样函数就不会在 listen.start()
:
之前被调用
listen = threading.Thread(target=listn, args=(s,conn,data))
不是
listen = threading.Thread(target=listn(s,conn,data))
此外,您不应该调用 .run()
,.start()
在新启动的线程内部执行此操作。 run
方法在那里,以便 Thread 的子类可以覆盖它。
在我的 python 程序 (2.7) 中,我尝试创建一个线程,但它在创建时立即启动,而不是在 start() 和 运行() 属性是叫。帮助会很棒。
这是我的(服务器)代码:
import sys
import socket
import threading
global connections
connections = []
def srcv(s, conn, data):
while True:
print "Recieving"
#Recieve Strings From Each Connection
for i, n in enumerate(connections):
data.append([connections[1], i.recv(4096)])
#Send String To Each Connection
print "Sending"
for i, n in enumerate(connections):
i.send("{0}: {1}".format(data[n][0], data[n][1]))
def listn(s, conn, data):
s.listen(10)
print "Listening For Connection"
while True:
obj, addr = s.accept()
connections.append([obj, addr])
def start_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = []
data = []
s.bind(("localhost", 12345))
print "Creating Listening Thread"
listen = threading.Thread(target=listn(s,conn,data))
print "Preparing Listening Thread"
listen.start()
print "Starting Listening Thread"
listen.run()
print "Creating Send/Receive Thread"
sandr = threading.Thread(target=srcv(s, conn, data))
print "Preparing Send/Receive Thread"
sandr.start()
print "Connections Now Acceptable"
sandr.run()
if __name__ == '__main__':
sys.exit(start_server())
如果我的代码看起来像 clunky/disorganized,请告诉我,总体而言,我对编程有些陌生。
编辑:
我遇到的另一个问题是我不能运行 两个线程,因为当一个线程启动时,另一个线程不能。为什么会这样,我该如何解决?
您需要将参数放在 args=
中,这样函数就不会在 listen.start()
:
listen = threading.Thread(target=listn, args=(s,conn,data))
不是
listen = threading.Thread(target=listn(s,conn,data))
此外,您不应该调用 .run()
,.start()
在新启动的线程内部执行此操作。 run
方法在那里,以便 Thread 的子类可以覆盖它。