处理多个套接字连接的最佳方法是什么

时间:2015-10-27 09:08:04

标签: 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','')))
    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'

1 个答案:

答案 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或使用多个进程。

来自David Beazley的

Here is a nice related read关于并发性,我改编了它的代码。