【问题标题】:Looking into getting into Python specifically for a project that involves threads and graphs专门为涉及线程和图的项目研究 Python
【发布时间】:2014-11-24 13:10:44
【问题描述】:

我在 C 语言方面有丰富的经验,但是对于分配给我的一个课程的项目,我正在考虑将它作为一个项目来向我介绍 Python。我以前从未使用过 Python,但我做了一些研究,很明显 GUI 设计和可视化对 Python 来说非常容易;但是,我一直无法在线程上找到任何库。

我的项目将有两个线程检查一个对象/类,以查看是否设置了布尔值,以便它可以对某些数据进行操作,一旦轮到它完成,它将标记另一个线程对相同的数据进行操作。我需要以图形方式显示图表上的数百个记录数据点。

我的问题如下:

  1. Python 是否有特定的库可以帮助我轻松地显示具有数百个点的图形? 如果是这样,您会向 Python 初学者推荐哪个?

  2. 哪些线程库最适合 Python 初学者?

感谢大家在这件事上的任何帮助。

【问题讨论】:

    标签: python c multithreading user-interface graph


    【解决方案1】:

    igraph 非常适合图形可视化。如果您的意思是绘制点,请使用 matplotlib。

    线程模块内置于python标准库。

    【讨论】:

      【解决方案2】:

      您可能不需要 Python 中的线程,因为一次只能运行一个。搜索 GIL(此处或 Google)。有像multiprocessing 这样的模块,可以轻松使用基于多进程的并发。下面创建两个进程,打印在 args 关键字 arg 中传递的字符串。多进程的最大问题是,因为它是多进程(并且进程具有单独的地址空间),所以必须显式处理共享对象。

      import multiprocessing as mp
      
      def f(name):
        print name
      
      p = mp.Process(target=f, args=('bob',))
      q = mp.Process(target=f, args=('jeff',))
      p.start()
      q.start()
      p.join()
      q.join()
      

      有关绘图,请参阅 matplotlib。您可以单独使用它来进行绘图和显示,也可以将其嵌入到 QT 等更大的 GUI 库中。下面在 matplotlib 中绘制一条线。

      import matplotlib as plt
      
      X = [0, 1, 2]
      Y = [0, 1, 2]
      plt.plot(X, Y)
      plt.show()
      

      它还可以绘制您能想到的几乎任何类型的图形(散点图、历史图、3d 冲浪/帧、轮廓等)。

      【讨论】:

      • 谢谢,这很有帮助。在您的示例中,共享对象的显式句柄是什么?
      • 我没有在示例中包含它,b/c 没有共享任何内容。您可以将对象从一个进程传递到另一个进程,只要它们不需要看到彼此所做的更改,就不需要额外的工作。如果他们需要查看更改,那么您需要分享状态:docs.python.org/2/library/…
      • 如果你曾经使用mmap 为 C 中的多进程应用程序分配共享内存,那么它在功能上很像,但显然更好更容易,因为它是 Python。
      • -1 因为这解释了 Python 中线程的缺点,但没有说明它们在 Python 中的处理(这是请求的)。此外,GIL 问题不适用于 OP 的用例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2016-12-13
      • 2021-10-09
      • 2014-04-27
      相关资源
      最近更新 更多