小编bar*_*ley的帖子

Python多进程概要分析

我正在努力弄清楚如何分析一个简单的多进程python脚本

import multiprocessing
import cProfile
import time
def worker(num):
    time.sleep(3)
    print 'Worker:', num

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        cProfile.run('p.start()', 'prof%d.prof' %i)
Run Code Online (Sandbox Code Playgroud)

我正在启动5个进程,因此cProfile会生成5个不同的文件.在每个内部我想看到我的方法'worker'运行大约需要3秒钟,但我只看到'start'method内部正在发生的事情.

如果有人能向我解释,我将不胜感激.

更新:基于已接受答案的工作示例:

import multiprocessing
import cProfile
import time
def test(num):
    time.sleep(3)
    print 'Worker:', num

def worker(num):
    cProfile.runctx('test(num)', globals(), locals(), 'prof%d.prof' %num)


if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
Run Code Online (Sandbox Code Playgroud)

python multiprocessing cprofile

42
推荐指数
2
解决办法
1万
查看次数

在Python中保留大型字典会影响应用程序性能

我在理解(并最终解决)为什么在内存中使用大型字典使得创建其他字典的时间更长时会遇到一些困难.

这是我正在使用的测试代码

import time
def create_dict():
    # return {x:[x]*125 for x in xrange(0, 100000)}
    return  {x:(x)*125 for x in xrange(0, 100000)}  # UPDATED: to use tuples instead of list of values


class Foo(object):
    @staticmethod
    def dict_init():
        start = time.clock()
        Foo.sample_dict = create_dict()
        print "dict_init in Foo took {0} sec".format(time.clock() - start)

if __name__ == '__main__':
    Foo.dict_init()
    for x in xrange(0, 10):
        start = time.clock()
        create_dict()
        print "Run {0} took {1} seconds".format(x, time.clock() - start)
Run Code Online (Sandbox Code Playgroud)

如果我按原样运行代码(首先在Foo中初始化sample_dict),然后在循环中再次创建相同的字典10次,我得到以下结果:

dict_init in Foo took 0.385263764287 …
Run Code Online (Sandbox Code Playgroud)

python dictionary garbage-collection

17
推荐指数
1
解决办法
2223
查看次数

Python多进程调试

我正在尝试调试一个简单的 python 应用程序,但到目前为止还没有运气。

import multiprocessing

def worker(num):
    for a in range(0, 10):
        print a

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
Run Code Online (Sandbox Code Playgroud)

我想在 for 循环中设置一个断点来跟踪 'a' 的值,但我尝试过的工具都无法做到这一点。到目前为止,我尝试使用以下方法进行调试:

  • PyCharm 并收到以下错误:ImportError: No module named pydevd - http://youtrack.jetbrains.com/issue/PY-6649看起来他们仍在为此进行修复,据我所知,没有 ETA这个
  • 我还尝试使用 Winpdb 进行调试 - http://winpdb.org但它根本不会进入我的 'worker' 方法而只是打印 'a' 的值

我真的很感激任何帮助!

python debugging multiprocessing pycharm winpdb

7
推荐指数
3
解决办法
1万
查看次数

JIRA - 发送电子邮件给匿名用户

我正试图找出一种方法,当通过电子邮件创建问题时,向匿名用户发送电子邮件.我需要的是这个匿名用户在问题打开,评论和关闭时收到通知电子邮件.根据他们的官方文档,这只能在创建者已经是JIRA中的用户或者即时创建用户时才能完成.这些都不适合我.到目前为止我找到的解决方法是:

  1. JEMH - 它承诺这个功能,但看起来不稳定,这意味着它似乎打破(至少一点点)每次JIRA更新,没有停机时间是可以接受的.
  2. 按照类似线程中的建议编写我自己的脚本

我编写自己的脚本没有问题,但我只是想确保我不会重新发明轮子.有没有其他方法可以做到这一点?

我会非常感谢任何帮助.

notifications jira issue-tracking

5
推荐指数
1
解决办法
2518
查看次数