J'essaie de comprendre le threading de base en python, j'ai du mal à comprendre comment fonctionne la mise en pool avec le module de file d'attente. Heres l'exemple de serveur utilisé dans le howto que je suis en train de lire: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/2/. Fondamentalement, ce que je ne comprends pas comment la pickledList variables finit à la disposition du fils portée à être expédiés au client depuis son jamais passées à la fil partout dans le codequelqu'un peut m'aider à comprendre ce court .py
import pickle
import Queue
import socket
import threading
# We'll pickle a list of numbers, yet again:
someList = [ 1, 2, 7, 9, 0 ]
pickledList = pickle.dumps (someList)
# A revised version of our thread class:
class ClientThread (threading.Thread):
# Note that we do not override Thread's __init__ method.
# The Queue module makes this not necessary.
def run (self):
# Have our thread serve "forever":
while True:
# Get a client out of the queue
client = clientPool.get()
# Check if we actually have an actual client in the client variable:
if client != None:
print 'Received connection:', client [ 1 ] [ 0 ]
client [ 0 ].send (pickledList)
for x in xrange (10):
print client [ 0 ].recv (1024)
client [ 0 ].close()
print 'Closed connection:', client [ 1 ] [ 0 ]
# Create our Queue:
clientPool = Queue.Queue (0)
# Start two threads:
for x in xrange (2):
ClientThread().start()
# Set up the server:
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.bind (('', 2727))
server.listen (5)
# Have the server serve "forever":
while True:
clientPool.put (server.accept())
Est-ce que ça marcherait de la même façon si pickledList était déclaré après que la classe ait été déclarée dans la liste? – Ryan
Désolé Christopher, ce que vous dites sur le "global" est malheureusement faux. La portée globale au niveau du module fait partie de la chaîne de recherche régulière dans Python, sans avoir besoin d'utiliser le mot-clé global. Vous devez utiliser le mot clé global uniquement si vous souhaitez "relier" la variable à un nouvel objet, c'est-à-dire si vous souhaitez utiliser l'instruction d'affectation. – krawyoti
@krawyoti: Notez que j'ai dit "pour le rendre clair". Je sais que ce n'est pas syntaxiquement nécessaire. – Christopher