私はPythonでの基本的なスレッドを理解しようとしていますが、キューモジュールでのプールの仕組みを理解できません。私が読んでいるハウツーに使用されているサンプルサーバをご紹介します:http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/2/。変数pickledListが誰かが私にこの短いことを理解するのを助けることができます.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())
リストが宣言された後にpickledListが宣言された場合と同じように動作しますか? – Ryan
申し訳ありませんクリストファー、「グローバル」についてあなたが言っていることは、残念ながら間違っています。モジュールレベルのグローバルスコープは、グローバルキーワードを使用する必要がなく、Pythonの通常のルックアップチェーンの一部です。変数を新しいオブジェクトに「リバインド」したい場合、つまり、そのオブジェクトに対してassignement文を使用する場合にのみ、globalキーワードを使用する必要があります。 – krawyoti
@krawyoti:私は「明らかにする」と言ったことに注意してください。私はそれが構文的に必要でないことを知っています。 – Christopher