在 Python2.7 中应用 Async

Posted

技术标签:

【中文标题】在 Python2.7 中应用 Async【英文标题】:Apply Async in Python2.7 【发布时间】:2020-07-11 12:05:43 【问题描述】:

我尝试为以前在 Python3 中工作的多处理编写简单的代码。目前,我想将我的代码从 Python3.6 迁移到 Python2.7。在 Python3.6 中,它显示了预期的结果,但在 Python 2.7 中没有。有人说我需要用with mp.Pool() as pool,结果还是一样。这是我的代码:

from __future__ import print_function
from multiprocessing import Pool

class Try():
    def print_this(self, test):
        print(test)

x = Try()
pool = Pool(1)
for i in range(10):
    pool.apply_async(x.print_this, args=(i,))
pool.close()
pool.join()

Python3 会显示这个

0
1
2
3
4
5
6
7
8
9

但不是在 Python2 中。你有什么建议吗?谢谢。

【问题讨论】:

我的建议是离开Python2:python.org/doc/sunset-python-2 【参考方案1】:

之前看到一个回答说需要使用ThreadPool作为替代。我不知道他/她为什么删除了答案,因为它实际上工作得很好。所以,这是我的代码:

from __future__ import print_function
from multiprocessing.pool import ThreadPool
# from multiprocessing.pool import Pool

class Try():
    def print_this(self, test):
        print(test)

# x = Try()
# pool = Pool(1)
# for i in range(10):
#     pool.apply_async(x.print_this, args=(i,))
# pool.close()
# pool.join()

x = Try()
pool = ThreadPool(processes=1)
pool.map_async(x.print_this, [i for i in range(10)])
pool.close()
pool.join()

【讨论】:

以上是关于在 Python2.7 中应用 Async的主要内容,如果未能解决你的问题,请参考以下文章

python2.7应用codecs模块处理包含中文的读写问题

python2.7应用codecs模块处理包含中文的读写问题

Linux CentOS6编译安装Python2.7

在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表

python2.7 使用调试的行为与没有调试的不同

python2.7和python3.6共存,使用pip安装第三方库