首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python多线程在向服务器发送消息时不能在套接字中工作?

为什么python多线程在向服务器发送消息时不能在套接字中工作?
EN

Stack Overflow用户
提问于 2018-11-23 16:40:24
回答 1查看 488关注 0票数 0

我想抓住蟒蛇的子弹屏。这个过程是,我将收到响应后,发送登录和其他一些消息到弹幕服务器。

当我计划抓取两个房间的弹幕时,我只能得到第一个请求的响应。

代码是这样的:

代码语言:javascript
复制
# coding=utf-8

import multiprocessing
import socket
import time
import re
import signal
import threading



client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname("openbarrage.douyutv.com")
port = 8601
client.connect((host, port))

def send_req_msg(msg):
    """
    wrap msg
    """
    pass

def set_msg(roomid):
    msg = 'type@=loginreq/roomid@={}/\0'.format(roomid)
    send_req_msg(msg)

    msg_more = 'type@=joingroup/rid@={}/gid@=-9999/\0'.format(roomid)
    send_req_msg(msg_more)



if __name__ == '__main__':
    pool = []
    roomid = [123, 666]
    for i in range(0, len(roomid)):
        t = threading.Thread(target=set_msg(roomid[i]))
        t.start()
        pool.append(t)
    for a in pool:
        a.join()

多进程和线程处理都不能成功。因为我用有线硬来分析tcp。只有第一个请求和它的回应。此外,我只能得到123房间的屏幕子弹。那么,为什么第二个线程/处理不能工作呢?那我该怎么办呢?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-23 17:09:38

T=threading.Thread(target=set_msg(房间))

这不会将函数set_msg()传递给线程。它调用函数并将结果传递给线程(在本例中,传递的值总是None,因为set_msg()不返回任何内容)。如果在创建线程之前调用函数,则该函数将不会在线程中运行。您需要将函数(及其参数)传递给线程构造函数,而不调用它:

代码语言:javascript
复制
t = threading.Thread(target=set_msg, args=(roomid[i],))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53450288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档