Многопоточность 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()

Запускается только первый поток


Ответы (0 шт):