2005年12月05日 星期一 19:21
下面这两个简单的程序一个是使用casing完成多线程调度,一个直接使用python内置模块的多线程调度。 casing因为多了更多的调度功能而会提高cup的占用率我是有心理准备的,不过没想到的是cup的占用率始终是100%。 我尝试过不显示、不增加on_process等办法均不见成效,请limodou看看,问题主要是出在哪。 ps:casing如果能解决这个问题实在是太方便了。 -- 我的blog: http://www.donews.net/fatbobman -------------- next part -------------- A non-text attachment was scrubbed... Name: casing_test1.py Type: text/x-python Size: 873 bytes Desc: not available Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20051205/a3ad7c24/casing_test1.py -------------- next part -------------- A non-text attachment was scrubbed... Name: thread_test1.py Type: text/x-python Size: 448 bytes Desc: not available Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20051205/a3ad7c24/thread_test1.py
2005年12月05日 星期一 21:37
在 05-12-5,Fat<fatbobman at gmail.com> 写道: > 下面这两个简单的程序一个是使用casing完成多线程调度,一个直接使用python内置模块的多线程调度。 > casing因为多了更多的调度功能而会提高cup的占用率我是有心理准备的,不过没想到的是cup的占用率始终是100%。 > 我尝试过不显示、不增加on_process等办法均不见成效,请limodou看看,问题主要是出在哪。 > ps:casing如果能解决这个问题实在是太方便了。 > 是嘛,真没关心过。我好好测试一下。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年12月05日 星期一 22:14
在 05-12-5,limodou<limodou at gmail.com> 写道: > 在 05-12-5,Fat<fatbobman at gmail.com> 写道: > > 下面这两个简单的程序一个是使用casing完成多线程调度,一个直接使用python内置模块的多线程调度。 > > casing因为多了更多的调度功能而会提高cup的占用率我是有心理准备的,不过没想到的是cup的占用率始终是100%。 > > 我尝试过不显示、不增加on_process等办法均不见成效,请limodou看看,问题主要是出在哪。 > > ps:casing如果能解决这个问题实在是太方便了。 > > > > 是嘛,真没关心过。我好好测试一下。 > 发现了。是在MultiCasing中的: def _start(self, syncvar=None, sync=False): self._exit_flag = False self.running = True while not self._exit_flag: self.event.wait(self.timestep) if not self.queue.empty() and len(self.active) < self.size: casing = self.queue.get() self.active.append(casing) casing.onsync(self._on_sync, casing) if not sync: casing.start_thread() else: casing.start_sync_thread() elif self.queue.empty() and not self.active: #not more thread obj need to run if not self.need_manual_stop: break elif len(self.active) == self.size: self.event.clear() self.running = False if not self.active and self.queue.empty() and self.on_finish: self._run(self.on_finish) elif self.on_abort: self._run(self.on_abort) 原来没有上面的 elif len(self.active) == self.size: self.event.clear() 本来是想利用event对象的,结果没用上。现在加上了。同时在MultiCasing构造方法中增加了timestep参数,可以控制等待的间隔。这回还加上了running_count()和remaining_count()两个方法,可以得到正在运行和未运行的Casing对象的个数。 应该可以了,再试试吧。谢谢报告。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年12月06日 星期二 08:33
在05-12-5,limodou <limodou at gmail.com> 写道: > > 在 05-12-5,limodou<limodou at gmail.com> 写道: > > 在 05-12-5,Fat<fatbobman at gmail.com> 写道: > > > 下面这两个简单的程序一个是使用casing完成多线程调度,一个直接使用python内置模块的多线程调度。 > > > casing因为多了更多的调度功能而会提高cup的占用率我是有心理准备的,不过没想到的是cup的占用率始终是100%。 > > > 我尝试过不显示、不增加on_process等办法均不见成效,请limodou看看,问题主要是出在哪。 > > > ps:casing如果能解决这个问题实在是太方便了。 > > > > > > > 是嘛,真没关心过。我好好测试一下。 > > > > 发现了。是在MultiCasing中的: > > def _start(self, syncvar=None, sync=False): > self._exit_flag = False > self.running = True > while not self._exit_flag: > self.event.wait(self.timestep) > if not self.queue.empty() and len(self.active) < self.size: > casing = self.queue.get() > self.active.append(casing) > casing.onsync(self._on_sync, casing) > if not sync: > casing.start_thread() > else: > casing.start_sync_thread() > elif self.queue.empty() and not self.active: #not more > thread obj need to run > if not self.need_manual_stop: > break > elif len(self.active) == self.size: > self.event.clear() > self.running = False > if not self.active and self.queue.empty() and self.on_finish: > self._run(self.on_finish) > elif self.on_abort: > self._run(self.on_abort) > > 原来没有上面的 > elif len(self.active) == self.size: > self.event.clear() > > > 本来是想利用event对象的,结果没用上。现在加上了。同时在MultiCasing构造方法中增加了timestep参数,可以控制等待的间隔。这回还加上了running_count()和remaining_count()两个方法,可以得到正在运行和未运行的Casing对象的个数。 > > 应该可以了,再试试吧。谢谢报告。 > -- > ok ,睡了一觉就发现改好了:) 上午就测试 -- 我的blog: http://www.donews.net/fatbobman -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051206/b93fcd3f/attachment.htm
2005年12月06日 星期二 11:00
测试结束,一切都很棒。 另外,你在关于casing的第5篇blog中提到,Casing 增加了isactive() 方法可以判断 Casing 对象是否还在运行。我感觉有些误导的成分。这个isactive只是说casing的住线程是否还有,而并不能表示在multicasing、need_manual_stop=True的情况下内部是否仍然有还在运行的casing. 看了你的代码,你其实已经做了一个runing的标志来表示是否有casing在运行。 ...... control = MultiCasing(size=3,timestep=1) control.onprocess(on_process) control.onfinish(on_finish) control.onabort(on_abort) for i in range(3): d = Casing(test_A,n=3) control.append(d) control.need_manul_stop=True control.start_sync_thread() time.sleep(10) while 1: if control.remaining_count()<10: for i in range(30): d = Casing(test_A,n=2)+Casing(test_A,n=3) control.append(d) if not control.running: control.start_sync_thread() #否则只增加,并不运行 time.sleep(1) -- 我的blog: http://www.donews.net/fatbobman
Zeuux © 2025
京ICP备05028076号