Server.py i sh
import random
import pickle
import time
import socket
num=random.random()
data=pickle.dumps(num)
now=time.time()
mail={'d':data,'t':now}
box=pickle.dumps(mail)
UDP_IP = socket.gethostname()
UDP_PORT = 42096
place=(UDP_IP,UDP_PORT)
tube = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tube.sendto(box, place)
import threading
randomnumstreamgo=True
def randomnumstreamloop(): #This sends a random number to 42069 every 10 seconds
global randomnumstreamgo
while randomnumstreamgo:
num=random.random()
data=pickle.dumps(num)
now=time.time()
mail={'d':data,'t':now}
box=pickle.dumps(mail)
tube.sendto(box, place)
delay=10
time.sleep(delay)
randomnumstream=True
randomnumstreamloophandler=[[thread,thread.start()] for thread in [threading.Thread(target=randomnumstreamloop,args=())]][0]
Client.py i sh
import socket
UDP_IP = socket.gethostname()
UDP_PORT = 42096
place=(UDP_IP,UDP_PORT)
tube = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tube.bind(place)
import pickle
def unbox(box):
mail=pickle.loads(box)
data=mail['d']
num=pickle.loads(data)
return num
data, addr = tube.recvfrom(1024)
fresh=0
doit=True
def thefreshest():
data, addr = tube.recvfrom(1024)
global fresh
fresh=unbox(data)
global doit
doit=True
#print(fresh)
thefreshest()
thefreshestgo=True
def thefreshestloop():
global thefreshestgo
while thefreshestgo:
thefreshest()
print("endingfreshestloop")
thefreshestgo=True
import threading
thefreshestloophandler=[[thread,thread.start()] for thread in [threading.Thread(target=thefreshestloop,args=())]][0]
def fibonacci(n):
a = 0
b = 1
if n < 0:
print("Incorrect input")
elif n == 0:
return a
elif n == 1:
return b
else:
for i in range(2,n):
c = a + b
a = b
b = c
return b
import random
def computationallyexpensive(x):
return str(fibonacci(250000+int(x*20000)))[::32][:1024]
grindinggo=False
grindinggo=True
def grindingloop():
global grindinggo
global doit
while grindinggo:
if doit:
print(computationallyexpensive(fresh))
doit=False
print("endinggrindingloop")
grindgo=True
grindinghandler=[[thread,thread.start()] for thread in [threading.Thread(target=grindingloop,args=())]][0]
В настоящее время я решаю эту проблему с помощью двух потоков, один поток постоянно обновление переменной freshest
и другой поток, работающий с ней. Есть ли способ получить все доступные датаграммы UDP, такие как recvall () с TCP, чтобы мне не нужно было создавать отдельный поток? Я понимаю, что UDP основан на дейтаграммах, а TCP - на потоках.