Многопоточность Python
Есть два потока, один принимает данные, второй анализирует, но из-за GIL в питоне, поток который принимает данные не даёт работать потоку который обрабатывает совершать хоть какое-то действие, пробовал Threading и multiprocessing, результат один и тот же, лидирующий поток не давал жить менее важному. Есть способы чтобы один поток не блокировал второй?
import socket
import struct
import time
from multiprocessing import Process
class Client:
def __init__(self, mcast_grp, mcast_port):
self.package_count = 0
self.lose_package_count = 0
self.value = []
self.socket = self.create_socket(mcast_grp, mcast_port)
def create_socket(self, mcast_grp, mcast_port):
sock = socket.socket(
socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP
)
sock.setsockopt(
socket.SOL_SOCKET, socket.SO_REUSEADDR, 1
)
sock.bind(('', mcast_port))
mreq = struct.pack(
"4sl", socket.inet_aton(mcast_grp), socket.INADDR_ANY
)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
return sock
def accept(self):
print('Done!')
prev_number = 1
while True:
response = self.socket.recv(10240).decode().split(':')
try:
# print(self.package_count, self.lose_package_count)
self.value.append(float(response[1]))
self.lose_package_count += (int(response[0]) - prev_number) - 1
self.package_count += 1
prev_number = int(response[0])
except Exception as ex:
print(ex)
def analyze(self):
print('start')
for i in range(1, 100):
print(len(self.value))
time.sleep(1)
if __name__ == '__main__':
client = Client('224.1.1.1', 5004)
Process(client.accept()).start()
Process(client.analyze()).start()
Запускается только первый поток