我需要做的是根据行数从文件中读取 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','')))
a.start()
#s.send wont work here because it doesn't exist in this context
我尝试使用线程,但似乎线程不允许您从我理解的线程本身外部访问它们
必须在一个帖子中支持while 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'
答案 0 :(得分:1)
如果要创建多个连接,可以这样做:
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')
然后,您可以使用select
模块随意执行任何操作。线程在这里没有多大帮助,甚至可能降低性能。您也可以按建议尝试Twisted或使用多个进程。
Here is a nice related read关于并发性,我改编了它的代码。