小编Cor*_*erg的帖子

多处理启动了太多的Python VM实例

我正在编写一些多处理代码(Python 2.6.4,WinXP),它生成运行后台任务的进程.在玩一些简单的例子时,我遇到了一个问题,我的代码只是不断产生新的进程,即使我只是告诉它产生一个固定的数字.

程序本身运行正常,但如果我查看Windows TaskManager,我会看到新的'python.exe'进程出现.随着程序的运行,它们会越来越多地产生(最终使我的机器挨饿).


例如,
我希望下面的代码启动2个python.exe进程.第一个是程序本身,第二个是它产生的子进程.知道我做错了什么吗?

import time
import multiprocessing


class Agent(multiprocessing.Process):
    def __init__(self, i):
        multiprocessing.Process.__init__(self)
        self.i = i

    def run(self):
        while True:
            print 'hello from %i' % self.i
            time.sleep(1)


agent = Agent(1)
agent.start()
Run Code Online (Sandbox Code Playgroud)

python windows multiprocessing

14
推荐指数
1
解决办法
4856
查看次数

unittest - 对输入和输出列表运行相同的测试

我有这个测试

import unittest

class TestName(unittest.TestCase):

        def setUp(self):
                self.name = "Bob"
                self.expected_name = "Bob"


        def test_name(self):
                # ... some operation over self.name
                print self.name
                self.assertEquals(self.name, self.expected_name)

if __name__ == '__main__':
        unittest.main(verbosity=2)
Run Code Online (Sandbox Code Playgroud)

我如何运行测试实例?

为输入和输出列表运行相同的测试(["Bob", "Alice", ...]),也许就像

TestName(name="Bob", expected_name="Bob")
TestName(name="Alice", expected_name="Alice")
Run Code Online (Sandbox Code Playgroud)

python python-unittest

13
推荐指数
1
解决办法
6063
查看次数

Python教程 - 我应该使用2.x还是3.0?

Python 3.0正处于测试阶段,不久将发布最终版本.显然,一般采用它需要一些重要的时间,并最终取代2.x.

我正在编写关于Python编程的某些方面的教程.我想知道我是否应该在Python 2.x或3.0中执行此操作?(不是差别很大)

2.x教程现在可能更有用,但是开始制作3.0教程会很不错.

有人有想法吗?

(当然我可以做到这两点,但我更愿意做一个或另一个)

python python-2.x python-3.x

8
推荐指数
2
解决办法
3320
查看次数

获取HTTP请求的TTFB(第一个字节的时间)

这是一个加载url并捕获响应时间的python脚本:

import urllib2
import time

opener = urllib2.build_opener()
request = urllib2.Request('http://example.com')

start = time.time()
resp = opener.open(request)
resp.read()
ttlb = time.time() - start
Run Code Online (Sandbox Code Playgroud)

由于我的计时器包裹在整个请求/响应(包括read()),这将给我TTLB(时间到最后一个字节).

我还想获得TTFB(第一个字节的时间),但我不知道从哪里开始/停止我的计时.urllib2是否足以让我添加TTFB计时器?如果是这样,他们会去哪里?

python http urllib2

6
推荐指数
2
解决办法
5586
查看次数

来自http流的非阻塞读取/记录

我有一个客户端连接到HTTP流并记录它消耗的文本数据.

我向流服务器发送HTTP GET请求...服务器回复并不断发布数据......它将发布文本或定期发送ping(文本)消息...并且永远不会关闭连接.

我需要以非阻塞方式读取和记录它消耗的数据.

我正在做这样的事情:

import urllib2

req = urllib2.urlopen(url)    
for dat in req: 
    with open('out.txt', 'a') as f:        
        f.write(dat) 
Run Code Online (Sandbox Code Playgroud)

我的问题是:
当流连续时,这会阻塞吗?
每个块中读取了多少数据,是否可以指定/调整?
这是读取/记录http流的最佳方式吗?

python logging http urllib2

6
推荐指数
2
解决办法
6651
查看次数

软断言和验证的区别

软断言和验证之间有什么区别吗?

我很清楚验证是使用 SoftAssert 类实现的。当任何一个方法失败时,上述两个关键字都将继续执行。

在 TestNG 框架中使用软断言和验证时是否有特定区别?

testng qa

6
推荐指数
1
解决办法
1859
查看次数

多线程资源访问 - 我在哪里放锁?

我有线程代码,每个线程需要写入同一个文件.为了防止并发问题,我使用的是Lock对象.

我的问题是我是否正确使用了锁.如果我从每个线程中设置锁定,该锁定是全局的还是仅特定于该特定线程?

基本上,我应该先创建一个Lock并将其引用传递给每个线程,还是可以像在此处一样在线程内设置它:

import time
from threading import Thread, Lock

def main():
    for i in range(20):
        agent = Agent(i)
        agent.start()

class Agent(Thread):
    def __init__(self, thread_num):
        Thread.__init__(self)
        self.thread_num = thread_num

    def run(self):
        while True:
            print 'hello from thread %s' % self.thread_num
            self.write_result()   

    def write_result(self):
        lock = Lock()
        lock.acquire()
        try:
            f = open('foo.txt', 'a')
            f.write('hello from thread %s\n' % self.thread_num)
            f.flush()
            f.close()
        finally:
            lock.release()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python multithreading locking

5
推荐指数
2
解决办法
1777
查看次数

从Outlook电子邮件中提取嵌入图像

我正在使用Microsoft的CDO(协作数据对象)以编程方式从Outlook邮箱中读取邮件并保存嵌入的图像附件.我正在尝试使用Win32扩展从Python执行此操作,但使用CDO的任何语言的示例都会有所帮助.

到目前为止,我在这里......

以下Python代码将读取我邮箱中的最后一封电子邮件,打印附件的名称,并打印邮件正文:

from win32com.client import Dispatch

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nbar');
inbox = session.Inbox
message = inbox.Messages.Item(inbox.Messages.Count)

for attachment in message.Attachments:
    print attachment

print message.Text

session.Logoff()
Run Code Online (Sandbox Code Playgroud)

但是,附件名称类似于:"zesjvqeqcb_chart_0".在电子邮件源中,我看到如下图像源链接:<IMG src ="cid:zesjvqeqcb_chart_0">

那么,是否可以使用此CID URL(或其他任何内容)来提取实际图像并将其保存在本地?

python email outlook cdo.message

4
推荐指数
1
解决办法
5809
查看次数

xmlrpclib客户端请求超时

我正在使用Python的xmlrpclib向xml-rpc服务发出请求.

有没有办法设置客户端超时,所以当服务器不可用时,我的请求不会永远挂起?

我知道我可以全局设置套接字超时socket.setdefaulttimeout(),但这不是更好.

python xmlrpclib

4
推荐指数
3
解决办法
6535
查看次数

Selenium WebDriver - 禁用本机事件(启用合成事件)

在Selenium(WebDriver)中,根据操作系统,Firefox驱动程序使用"本机事件"进行用户交互模拟(键盘,鼠标等).它还可以使用"合成事件",通过Javascript模拟用户交互.

如何禁用本机事件,并启用合成事件?(在Python中)

python firefox selenium selenium-webdriver

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