![]() |
1
13
首先,你实际上需要保存
全部的
那些
进行多线程编程的一个简单方法是为每个线程提供运行所需的所有数据,然后让它不向工作集之外的任何对象写入数据。如果所有线程都遵循该准则,则它们的写入操作不会相互干扰。然后,一旦线程完成,就 仅主螺纹 将结果聚合到全局数组中。这被称为“fork/join并行”。 如果对线程对象进行子类化,则可以给它空间来存储返回值,而不干扰其他线程。然后你可以这样做:
编辑: 环顾四周,好像上面的方法 isn't the preferred way to do threads in Python . 以上是线程的Java ESK模式。相反,你可以做如下的事情:
|
![]() |
2
14
使用A
编辑 :您的代码还有其他大问题——如果线程的最大数目小于关键字的数目,它将永远不会终止(您正试图为每个关键字启动一个线程——永远不会减少——但是如果您已经启动了最大数目,那么您将永远循环到没有进一步的目的)。
考虑改用
线程池
有点像
this recipe
,除了代替排队的可调用文件之外,您将把关键字排队——因为您希望在线程中运行的可调用文件在每个线程中都是相同的,只是改变了参数。当然,可调用将被更改为从传入任务队列中剥离某些内容(使用
为了终止N个线程,在所有关键字之后,
通常情况下,
|
![]() |
3
3
您需要保持指向您所创建的每个线程的指针。实际上,您的代码只确保最后创建的线程完成。这并不意味着你在完成之前开始的所有工作都已经完成了。
这也解决了写访问的问题,因为每个线程都将在本地存储其数据。然后,在完成所有这些任务之后,您可以完成将每个线程本地数据组合起来的工作。 |
![]() |
4
1
我知道这个问题有点老了,但最好的方法是不要像其他同事提出的那样伤害自己。) 请阅读参考资料 Pool . 这样你就可以参与工作了:
|
![]() |
5
0
如果使用信号量来保护关键部分,则可以写入全局数组。当您想附加到全局数组时,可以“获取”锁,完成后,可以“释放”。这样,每个数组都只有一个线程。 退房 http://docs.python.org/library/threading.html 并搜索信号灯以获取更多信息。
|
![]() |
6
0
尝试一些信号量的方法,比如获取和释放。 http://docs.python.org/library/threading.html |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |