首页 \ 问答 \ Python中非常简单的并发编程(Very simple concurrent programming in Python)

Python中非常简单的并发编程(Very simple concurrent programming in Python)

我有一个简单的Python脚本,它使用了两个更复杂的Python脚本,并对结果进行了一些处理。

我有两个模块,Foo和Bar,我的代码如下所示:

import Foo
import Bar

output = []

a = Foo.get_something()
b = Bar.get_something_else()

output.append(a)
output.append(b)

两种方法都需要很长时间才能运行,并且两者都不依赖于其他方法,所以显而易见的解决方案是并行运行它们。 我该如何做到这一点,但要确保顺序得以保持: 无论哪个人首先完成,必须等待另一个完成才能继续执行脚本

如果我没有把自己弄清楚,请告诉我,我试图让示例代码尽可能简单。

编辑:

感谢Amber,您的解决方案只需稍作修改即可使用。

当创建每个线程时,不要调用start(),而是像下面这样设置它们:

threadname = threading.Thread(target=foo)
threadname.start()

没有这个,我得到了错误AttributeError: 'NoneType' object has no attribute 'join'和一些非常奇怪的并发行为。 如果你在下面编辑你的答案,我会将其标记为已解决。


I have a simple Python script that uses two much more complicated Python scripts, and does something with the results.

I have two modules, Foo and Bar, and my code is like the following:

import Foo
import Bar

output = []

a = Foo.get_something()
b = Bar.get_something_else()

output.append(a)
output.append(b)

Both methods take a long time to run, and neither depends on the other, so the obvious solution is to run them in parallel. How can I achieve this, but make sure that the order is maintained: Whichever one finishes first must wait for the other one to finish before the script can continue.

Let me know if I haven't made myself clear enough, I've tried to make the example code as simple as possible.

EDIT:

Thanks Amber, your solution works with one slight change.

Instead of calling start() on each thread when it is created, I set them up like so:

threadname = threading.Thread(target=foo)
threadname.start()

Without this I was getting the error AttributeError: 'NoneType' object has no attribute 'join' and some very weird behaviour with the concurrency. If you edit your answer below I will mark it as solved.


原文:https://stackoverflow.com/questions/10475448
更新时间:2023-06-03 19:06

最满意答案

您的LockNow类不会扩展任何Activity ,而是扩展Receiver ,因此您应该在androidManifest.xml这种方式声明它。 在那里你已经为同一个LockNow类声明了一个activity和一个receiver

您必须删除活动声明:

<activity android:name=".LockNow" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity> 

将基础Controller类保留main launcher activity ,将LockNowLockNowreceiver


Your LockNow class does not extend any Activity, but a Receiver, so you should declare it that way in your androidManifest.xml. There you have declared both an activity and a receiver for the very same LockNow class.

You must drop the activity declaration:

<activity android:name=".LockNow" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity> 

Leave the underlying Controller class as main launcher activity, the LockNow class as receiver.

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。