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
最满意答案
您的
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
,将LockNow
类LockNow
为receiver
。Your
LockNow
class does not extend anyActivity
, but aReceiver
, so you should declare it that way in yourandroidManifest.xml
. There you have declared both anactivity
and areceiver
for the very sameLockNow
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 asmain launcher activity
, theLockNow
class asreceiver
.
相关问答
更多-
它发生在这里: layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); layout在ListView中使用,因此它应该具有AbsListView.LayoutParams 然后在这里: adView.setLayoutParams(new AbsListView.Lay ...
-
您的LockNow类不会扩展任何Activity ,而是扩展Receiver ,因此您应该在androidManifest.xml这种方式声明它。 在那里你已经为同一个LockNow类声明了一个activity和一个receiver 。 您必须删除活动声明:
Android图像裁剪器库java ClassCastException(Android image cropper library java ClassCastException)[2022-02-26]
所以这是问题的最终答案。 com.edmodo:cropper:1.0.1库正在导入com.edmodo.cropper.cropwindow.CropOverlayView,我将其删除并解决了问题 应用程序的build.gradle文件的dependencies部分应如下所示 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile ...Android - 应用程序崩溃“java.lang.ClassCastException”(Android - App crashing with “java.lang.ClassCastException”)[2021-10-10]
除了实现extends Application类之外,您还需要告诉Android系统将哪个类用作Application类。 为此,请在清单中设置应用程序类的名称:SharedPreference ClassCastException问题Android(SharedPreference ClassCastException Issue Android)[2022-06-29]
给你的常量值: MEAL_ID =“meal_id” Give your constants values: MEAL_ID = "meal_id"java.lang.ClassCastException:android.app.ContextImpl(java.lang.ClassCastException: android.app.ContextImpl)[2022-11-19]
如果您在此处查看ScoreNinjaAdapter的代码,则会显示它将上下文转换为Activity 。 尝试使用this代替getBaseContext ,因为您是从一个活动调用的。 If you look at the code for ScoreNinjaAdapter here, it shows that it casts the context to Activity. Try using this instead of getBaseContext, since you're calling f ...我认为你需要在你的清单中放置这样的东西(即如果你的清单中还没有它)与TreeMap比较的Android ClassCastException(Android ClassCastException with TreeMap comparison)[2021-11-11]
你说myMap是一个TreeMap- 但是你正在调用myMap.get(2)。 获取的参数应该是一个字符串。 You say myMap is a TreeMap - but you're calling myMap.get(2). The param to get should be a string. 如何修复java.lang.ClassCastException Android(How to fix java.lang.ClassCastException Android)[2023-08-08]
ClassCastException异常 抛出以指示代码已尝试将对象强制转换为不是实例的子类。 Caused by: java.lang.ClassCastException: com.spp.udi.sppmap.Potensi cannot be cast to android.app.Activity 你正在使用android inbuild Listview @ + id / android:list 所以,请扩展ListActivity而不是ListFragment 。 public class ...Android上从Double到Integer的奇怪ClassCastException(Strange ClassCastException from Double to Integer on android)[2021-09-29]
问题来了,因为ArrayList staredIndex包含不同类型的data.ArrayList包含Double和Integer类型的数据,但你已经将staredIndex ArrayList声明为Integer。你应该只在ArrayList中添加整数类型数据,或者你应该从Double中输入类型整数。 The problem is coming because ArrayList staredIndex contains different type of data.ArrayList contains ...相关文章
更多- Aspect-Oriented Programming
- 10 Programming Languages You Should Learn Right Now
- Python资源索引 【转载】
- Object Oriented Programming
- python top project of 2013
- Mod_python: The Long Story
- 【转帖】Python 资源索引
- Python:渗透测试开源项目【源码值得精读】
- 探索 Python,第 1 部分: Python 的内置数值类型
- python2和python3的区别
最新问答
更多- 获取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的基本操作命令。。。