用python线程构建wordcloud

用python线程构建wordcloud,python,multithreading,Python,Multithreading,我正在用python构建一个简单的词频计数器应用程序。这份文件将近160万字。我把作品(句子)平均地分成几行。理想情况下,运行时间会随着线程数的增加而减少(直到达到某个阈值),但在我的测试中似乎不是这样。由于某些原因,单线程每次都比多线程实现快得多。我之前使用锁写入全局哈希表,但我发现这对于多线程环境来说效率很低(至少慢2-3倍)。然后,我开始为每个线程编写单独的哈希表,并在最后合并它们。单线程方法现在需要4.5秒的时间,但多线程方法至少要慢一两秒。有没有想过我做错了什么?原因被称为。这种机制使

我正在用python构建一个简单的词频计数器应用程序。这份文件将近160万字。我把作品(句子)平均地分成几行。理想情况下,运行时间会随着线程数的增加而减少(直到达到某个阈值),但在我的测试中似乎不是这样。由于某些原因,单线程每次都比多线程实现快得多。我之前使用锁写入全局哈希表,但我发现这对于多线程环境来说效率很低(至少慢2-3倍)。然后,我开始为每个线程编写单独的哈希表,并在最后合并它们。单线程方法现在需要4.5秒的时间,但多线程方法至少要慢一两秒。有没有想过我做错了什么?

原因被称为。这种机制使得在任何给定的时间只能执行一个线程

您可能会注意到另一个异常,您拥有的内核越多,代码运行越慢。如果所有线程都在单核上,操作系统可以调度它们的执行,而不会对GIL产生争用,但是如果线程在多个核之间分割,则会对GIL产生争用,这一点非常明显

如果您希望进行并行处理,则不应考虑使用Python中的首选方法,而不是线程,


您仍然可以使用线程来阻止IO操作,尽管在这种情况下编写非阻塞代码更好,这是一种流行的框架。

1.6M单词可能无法保证多任务处理的效果;计算机很快。搜索“Python GIL”查找臭名昭著的全局解释器锁,以及为什么多线程对一类任务几乎没有负面的改进。出于好奇,我刚刚统计了164万个单词,其中包含
集合。在一台dippy笔记本电脑上,计数器在244毫秒内用2行短代码进行计数。你真的不需要线程。