Python 处理多个套接字连接的最佳方法是什么
我需要做的是根据行的数量从文件中读取x帐户的数量,并制作x我可以随意操作的单个套接字的数量(向IRC和其他任何东西发送消息) 到目前为止,我将如何处理:Python 处理多个套接字连接的最佳方法是什么,python,multithreading,sockets,Python,Multithreading,Sockets,我需要做的是根据行的数量从文件中读取x帐户的数量,并制作x我可以随意操作的单个套接字的数量(向IRC和其他任何东西发送消息) 到目前为止,我将如何处理: lines=tuple(open('accts.txt', 'r')) for line in lines: data=line.split(' ',1) a=threading.Thread(target=Spawn,args=(data[0].replace('\n',''),data[1].replace('\n','')
lines=tuple(open('accts.txt', 'r'))
for line in lines:
data=line.split(' ',1)
a=threading.Thread(target=Spawn,args=(data[0].replace('\n',''),data[1].replace('\n','')))
a.start()
#s.send wont work here because it doesn't exist in this context
我试图使用线程,但据我所知,线程似乎不允许您从线程本身的外部访问它们
必须支持线程中的,而True:
,但如果不可行,我可以不使用它
以下是线程正在创建的Spawn函数:
def Spawn(nick,password):
Active=True
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('irc.boats.gov',6667))
s.send('PASS '+password+'\r\n')
s.send('NICK '+nick+'\r\n')
s.send('JOIN '+channel+'\r\n')
while True:
buf=s.recv(1024)
if('PRIVMSG' in buf):
sender=buf.split('!',1)[0].split(':')
message=buf.split(':',2)[2].replace('\n','')
if(sender[1]==owner):
if(sender[1]==owner):
if(message.strip()=='!stop'):
Active=False
print '('+nick+')'+' has been disabled'
else:
if(message.strip()=='!start'):
Active=True
print '('+nick+')'+' has been enabled'
else:
if(Active):
print 'sent'
如果要创建多个连接,可以按如下方式进行:
from socket import *
SERVER = ('irc.boats.gov',6667) # Server address
# Open up connections
connections = []
with open('accts.txt', 'r') as f:
for line in f:
s = socket(AF_INET,SOCK_STREAM)
s.connect(SERVER)
connections.append(s)
s.send('PASS '+password+'\r\n')
s.send('NICK '+nick+'\r\n')
s.send('JOIN '+channel+'\r\n')
然后,您可以使用模块对它们执行任何操作。线程在这里帮助不大,甚至会降低性能。您也可以按照建议尝试Twisted或使用多个进程
从David Beazley关于并发性的文章中,我改编了其中的代码。您计划同时打开多少个套接字?如果它们可以变成数千个,我们就可以超过线程数量的实际限制。换成twisted怎么样?@olivecoder只有20-30个,如果是这样的话,你有select的例子吗?它的用途似乎令人困惑