Python:确定需要创建的线程数

2 投票
2 回答
1199 浏览
提问于 2025-04-17 23:26

IOError: [错误号 socket 错误] [错误号 10055] 由于系统缺少足够的缓冲区空间或队列已满,无法对套接字执行操作。

我该如何确定应该创建多少个线程实例,以防止我的程序遇到上述错误呢?

def do_work(sym):
    if quote.get_price(i) != '0.00':
        print '%s: %s' % (i, squote.get_price(i))

for i in perm:
    t = Thread(target=do_work, args=(i,))
    t.start()

注意:
1. len(perm) 大约是 27000
2. quote.get_price() 的功能类似于:

return urllib.urlopen(url).read().strip().strip('"')

2 个回答

2

你遇到的问题可能是因为有27,000个线程在运行,这样会造成很大的负担。建议你可以先创建一个股票的队列,列出你想要获取报价的股票,然后用5到10个线程的工作池来获取这些股票的价格。

2

使用线程池,而不是创建27,000个线程。

import multiprocessing.pool

def do_work(sym):
    if quote.get_price(sym) != '0.00':
        print '%s: %s' % (sym, squote.get_price(sym))

if __name__ == '__main__':
    number_of_threads = 4
    pool = multiprocessing.pool.ThreadPool(number_of_threads)
    pool.map(do_work, perm)

撰写回答