gpt4 book ai didi

python - 让python套接字异步?

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:59 25 4
gpt4 key购买 nike

我有以下脚本,我正在尝试使其异步。它可以作为客户端通过 TCP 连接并发送文本文件。但是,我从另一个软件程序执行它,并且它减慢了我运行它的程序(因此需要异步)。我的目标是让脚本在它自己的后台线程中运行,这样它就不会影响正在执行的程序。

我尝试添加 asyncore,但我不断收到错误,而且似乎无法连接。我也尝试过线程,但也无法让它工作。如果您能提供有关如何实现异步的任何指示,我们将不胜感激

我尝试过使用此处的教程 - http://www.mechanicalcat.net/richard/log/Python/A_simple_asyncore__echo_server__example然而,他们的脚本架构与我的非常不同,我似乎无法将其合并到我的脚本中。

import socket
import struct
import sys
import os
import time
import os.path

_MAX_BLOCK_SIZE = 1448
_PORT = 8002
IP_ADDRESS = '192.168.1.5'
FILE = sys.path[0] + "/MyFile.txt"

class FileSender(object):

def __init__(self, host):
self.__host = IP_ADDRESS

def __Pad(self, buf):
"""Returns copy of buf padded with NULLs to make its length a multiple of 4 bytes."""

if len(buf) % 4 == 0:
return buf

pad_buf = ""
for i in range(4 - (len(buf) % 4)):
pad_buf += "\x00"

return buf + pad_buf
def __FormatInt(self, int):

"""Returns string containing 32-bit integer in network byte order."""
return struct.pack("!i", int)

def Send(self, buf):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((self.__host, _PORT))

padded_buf = self.__Pad(buf)

# Send header packet.
s.send("%s%s%s%s" % (self.__FormatInt(16 + len(padded_buf)),
self.__Pad("/txtl"),
self.__Pad(",b"),
self.__FormatInt(len(buf))))

# Send data packets.
bytes_sent = 0
while (bytes_sent < len(padded_buf)):
bytes_to_send = len(padded_buf) - bytes_sent
assert bytes_to_send % 4 == 0
bytes_this_block = min(_MAX_BLOCK_SIZE, bytes_to_send)
s.send(padded_buf[bytes_sent:(bytes_sent + bytes_this_block)])
bytes_sent += bytes_this_block

s.close()
return bytes_sent

def main(argv):

sendtextfile = FileSender(IP_ADDRESS)

# Read input data.
input_file = open(_FILE)
data = input_file.read().strip()
input_file.close()
datasend = data[:-7]

bytes_sent = sendtextfile.Send(datasend)

if __name__ == "__main__":
main(sys.argv)

最佳答案

线程将是我使用的方法。试试这个:

thread = threading.Thread(target = sendtextfile.Send, args = (datasend,))
thread.start()

关于python - 让python套接字异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28328628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com