versuchen für 2 Tage Multi-Processing zum Arbeiten beim Erstellen von Verbindungen zu einem NNTP-Server. Ziel: Mach so schnell wie möglich eine Menge Verbindungen (wie 50). Da das Herstellen von Verbindungen in einer for-Schleife langsam sein kann (z. B. bis zu 10 s), möchte ich sie alle gleichzeitig mit Multiprocessing machen. Nach dem Erstellen der Verbindungen bleiben sie offen, da in einem zukünftigen Multiprocessing-Teil mehr als 10.000 Anfragen gestellt werden, die sich auf ein ähnliches Prinzip stützen.So erstellen Sie Nntplib-Objekte mit Multiprocessing
Einige vereinfachte Teil des Codes:
#!/usr/bin/env python3
import sys
import ssl
from nntplib import NNTP_SSL
from multiprocessing import Pool
def MakeCon(i, host, port):
context = ssl.SSLContext(ssl.PROTOCOL_TLS)
s = NNTP_SSL(host, port=port, ssl_context=context, readermode=True)
print('created connection', i) # print to see progress
sys.stdout.flush()
return s
def Main():
host = 'reader.xsnews.nl'
port = 563
num_con = 4
y=MakeCon(1, host, port).getwelcome() #request some message from NNTP host to see if it works
print(y)
# the actual part that has the issue:
if __name__ == '__main__':
cons = range(num_con)
s = [None] * num_con
pool = Pool()
for con in cons:
s[con]=pool.apply_async(MakeCon, args=(con, host, port))
pool.close
print(s[1])
for con in cons:
t=s[con].getwelcome() #request some message from NNTP host to see if it works
print(t)
print('end')
Main()
angezeigt, dass die Verbindung zum NNTP-Server usw. funktioniert, aber ich kann nicht an dem Teil der Verbindungen in ein Objekt zu extrahieren I in Kombination mit dem nntplib verwenden kann Optionen. Ich würde sagen, ich bin nicht so erfahren mit Python, vor allem nicht Multiprocessing.
Versuchen Sie, mehrere Verbindungen zu demselben Newsserver zu erstellen? – JohanL
@JohanL Danke, ja, und so schnell wie möglich, also ich mag es nicht, Schleife über die NNTP_SSL()/NNTP(), wie jedes Mal es eine Wartezeit von sagen kann 1 s, bevor die Verbindung hergestellt wird. Deshalb möchte ich sie 'simultan' mit Multiprocessing erstellen. – uytda