4

我需要做一些网络绑定调用(例如,获取一个网站),我不希望它阻塞 UI。如果我在 pyobjc 中工作,我应该使用 NSThread 还是 python 的线程模块?我找不到任何有关如何选择其中一个的信息。请注意,我并不真正关心 Python 的 GIL,因为我的任务根本不受 CPU 限制。

4

4 回答 4

2

没有区别,您将获得相同的行为,但界面略有不同。使用最适合您的系统的那个。

于 2009-02-20T06:02:54.393 回答
0

我有一个不同的建议,主要是因为 GIL(全局解释器锁)导致 python 线程非常糟糕,尤其是当你有多个 cpu 内核时。有一个视频演示非常详细,但我现在找不到视频 - 它是由 Google 员工完成的。

无论如何,您可能想考虑使用子进程模块而不是线程(有一个可以执行的帮助程序,或者在系统上使用另一个二进制文件。或者使用 NSThread,它应该给你比 CPython 获得的性能更高的性能线程。

于 2009-11-05T15:56:31.723 回答
0

学会爱上运行循环。使用Cocoa 的 URL 加载系统(或者,如果您需要普通套接字,则NSFileHandle)并让它在响应(或失败)返回时调用您。然后您根本不必处理线程(URL 加载系统将为您使用线程)。

几乎在 Cocoa 中创建自己的线程的唯一时间是当您有一个无法中断的大任务(>0.1 秒)时。

(有人可能会说 NSOperation,但是NSOperationQueue 坏了RAOperationQueue不支持并发操作。如果你已经有一堆 NSOperationQueue 代码或者真的想为工作 NSOperationQueue 做准备,但是如果你现在需要并发,运行循环或线程。 )

于 2009-02-20T13:18:51.587 回答
0

我更喜欢原生 python 线程解决方案,因为我可以加入和引用线程。AFAIK, NSThreads 不支持线程加入和取消,您可以使用 python 线程完成各种事情。

此外,NSThreads 不能有多个参数,这很糟糕,尽管有解决方法(比如使用NSDictionarys 和NSArrays),但它仍然不像调用具有按顺序排列的参数/对应参数的线程那样优雅和简单.

但是,是的,如果情况要求您使用NSThreads,则根本不应该有任何问题。否则,坚持使用本机 python 线程很酷。

于 2009-08-26T00:05:36.753 回答