<p>我有一个pylons应用程序,在这个应用程序中,在某些情况下,我希望生成多个工作线程来处理队列中的项目。现在我们没有使用线程池(这是理想的,但我们稍后会添加它)。主要问题是工作线程日志记录没有写入日志文件。在</p>
<p>当我在pylons应用程序之外运行代码时,日志记录工作得很好。所以我认为这和塔柱日志处理程序有关,但不确定是什么。在</p>
<p>下面是代码的一个基本示例(精简):</p>
<pre><code>import logging
log = logging.getLogger(__name__)
import sys
from Queue import Queue
from threading import Thread, activeCount
def run(input, worker, args = None, simulteneousWorkerLimit = None):
queue = Queue()
threads = []
if args is not None:
if len(args) > 0:
args = list(args)
args = [worker, queue] + args
args = tuple(args)
else:
args = (worker, queue)
# start threads
for i in range(4):
t = Thread(target = __thread, args = args)
t.daemon = True
t.start()
threads.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(t)
# add ThreadTermSignal
inputData = list(input)
inputData.extend([ThreadTermSignal] * 4)
# put in the queue
for data in inputData:
queue.put(data)
# block until all contents are downloaded
queue.join()
log.critical("** A log line that appears fine **")
del queue
for thread in threads:
del thread
del threads
class ThreadTermSignal(object):
pass
def __thread(worker, queue, *args):
try:
while True:
data = queue.get()
if data is ThreadTermSignal:
sys.exit()
try:
log.critical("** I don't appear when run under pylons **")
finally:
queue.task_done()
except SystemExit:
queue.task_done()
pass
</code></pre>
<p>请注意,RUN方法中的loglin将显示在日志文件中,但是worker方法中的日志行(在派生线程中运行)不会出现。任何帮助都将不胜感激。谢谢</p>
<p>**EDIT:我应该提到,我尝试过将“log”变量传递给worker线程,并在线程中重新定义一个新的“log”变量,但都没有成功。在</p>
<p>**EDIT:添加用于pylons应用程序的配置(来自INI文件)。下面的代码片段来自INI文件。在</p>
^{pr2}$