我正在编写一些多处理代码(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) 我有这个测试
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 3.0正处于测试阶段,不久将发布最终版本.显然,一般采用它需要一些重要的时间,并最终取代2.x.
我正在编写关于Python编程的某些方面的教程.我想知道我是否应该在Python 2.x或3.0中执行此操作?(不是差别很大)
2.x教程现在可能更有用,但是开始制作3.0教程会很不错.
有人有想法吗?
(当然我可以做到这两点,但我更愿意做一个或另一个)
这是一个加载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计时器?如果是这样,他们会去哪里?
我有一个客户端连接到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流的最佳方式吗?
软断言和验证之间有什么区别吗?
我很清楚验证是使用 SoftAssert 类实现的。当任何一个方法失败时,上述两个关键字都将继续执行。
在 TestNG 框架中使用软断言和验证时是否有特定区别?
我有线程代码,每个线程需要写入同一个文件.为了防止并发问题,我使用的是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) 我正在使用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的xmlrpclib向xml-rpc服务发出请求.
有没有办法设置客户端超时,所以当服务器不可用时,我的请求不会永远挂起?
我知道我可以全局设置套接字超时socket.setdefaulttimeout(),但这不是更好.
在Selenium(WebDriver)中,根据操作系统,Firefox驱动程序使用"本机事件"进行用户交互模拟(键盘,鼠标等).它还可以使用"合成事件",通过Javascript模拟用户交互.
如何禁用本机事件,并启用合成事件?(在Python中)