Python我应该使用线程

时间:2012-02-01 14:52:12

标签: python

我目前有几个小应用程序< 500行。我打算最终在一个小的LINUX ARM盒子上运行它们。组合这些应用程序并使用线程是否更好,或者继续将它们作为两个独立的应用程序?

这些应用程序加上一个非常小的网站使用一个小的sqlite数据库,尽管只有一个应用程序会编写其他当前读取的内容。由于目标框的限制,我使用的是Python 2.6。

我使用SQLite来防止数天使用中的数据丢失。尽管存在数据库锁定问题的可能性,尤其是在期间数据维护期间,但两个应用程序之间没有直接交互。停止这些问题也是两个应用程序的足迹,因为目标设备非常小。

4 个答案:

答案 0 :(得分:4)

取决于您是否需要它们共享数据以及共享的相关性。除此之外,从速度的角度来看,对于多处理机器而言,线程不会比单独的流程更具优势。

如果可以通过平面文件或数据库轻松进行共享,那么只需将它们分开,而不是通过线程进行复杂化。

答案 1 :(得分:2)

出于性能目的,我建议你使用线程,进程消耗比线程更多的资源,创建速度更快,需要更少的内存(在嵌入式环境中很有用),但当然,你必须处理使用多线程编程的常见陷阱(通过锁解决的concurent访问,但锁可能导致互锁...)

如果您计划使用许多进行低级别调用的库,可能使用C扩展,无法正确释放GIL(全局解释器锁),在这种情况下,进程可以是更好的解决方案,允许您的应用程序即使一个被GIL阻止也会运行。

答案 2 :(得分:1)

如果需要在两者之间传递数据,可以使用multiprocessing模块中的队列和其他机制。

使用多处理而不是使用线程模块共享内存或对象通常要简单得多。

如果您不需要在程序之间传递数据,只需单独运行它们(并尽快释放文件或数据库上的任何锁定以减少争用)。

答案 3 :(得分:0)

我决定采用流程而非线程方法来解决此问题。这个决定的主要因素是简单性。第二个因素是,其中一个应用程序将执行数据采集,另一个将在临时基础上与调制解调器通信(接收呼叫)我无法控制调用应用程序但基于我的调查,有很多可能会出错。 有几个因素可能会进一步改变方法,主要是两个进程需要交互以防止数据库上的数据争用。其次,如果资源(内存/磁盘空间/ cpu)成为问题(由于设备的大小),一个应用程序应该让我能够管理这些问题。 那说数据采集应用程序已经是线程化的。这允许父线程在出现异常时管理工作线,因为设备不在受管环境中。

相关问题