当我写一个消息驱动的应用程序.就像标准的Windows应用程序一样,它广泛使用消息传递进行内部操作,这对于线程化的最佳方法是什么?
在我看来,基本上有三种方法(如果你有任何其他设置,请分享):
那么,三者之间是否存在显着的性能差异?以下是一些一般性的想法:显然,最后两个选项受益于多个处理器的情况.另外,如果任何线程正在等待外部事件,则其他线程仍然可以处理不相关的消息.但忽略这一点,似乎多线程只增加开销(线程切换,更不用说更复杂的同步情况).
另一个问题:您是否建议在标准的Windows消息传递系统上实现这样的系统,或者实现单独的队列机制,为什么?
我需要一个充当队列的简单表.我的MySQL服务器限制是我不能使用InnoDB表,只能使用MyISAM.
客户/工作人员将同时工作,他们每次都需要接收不同的工作.
我的想法是做以下(伪代码):
$job <- SELECT * FROM queue ORDER BY last_pop ASC LIMIT 1;
UPDATE queue SET last_pop WHERE id = $job->id
return $job
Run Code Online (Sandbox Code Playgroud)
我曾尝试过表锁和"GET_LOCK",但没有任何事情发生,工人有时会收到同样的工作.
应用程序上有许多活动需要以下内容:
执行这些任务的一种好方法是写入执行操作的异步队列.
什么django应用程序可以用来实现这样的功能,就像Amazon Simple Queue服务在本地提供的那样?
我遇到过芹菜.正确的事?还有其他什么东西,像这样吗?
使用PHP,我有一个查询,通过我的数据库在一天中的某些时间查找具有提醒触发器的待处理任务.我有一个每10分钟运行一次的cronjob,并检查数据库中是否有"remind_me"字段设置为在接下来的10分钟内关闭的任何行.如果确实找到了什么,那么使用任务信息排队电子邮件的最佳方法是什么?
我想我需要某种消息队列系统,但电子邮件部分如何工作?我是否需要另一个每分钟运行一次的cronjob来检查队列系统?
我正在尝试使用MongoDB作为Celery的消息队列(在Django应用程序中).Celery(2.2.0rc2)的当前开发版本应该允许你这样做,但我似乎无法让任何工作人员去接受我正在创建的任务.
版本:芹菜v2.2.0rc3
mongodb 1.6.5
pymongo 1.9
django-celery 2.2.0rc2
在我的设置中,我有:
CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
# Shouldn't need these - defaults are correct.
"host": "localhost",
"port": 27017,
"database": "celery",
"taskmeta_collection": "messages",
}
BROKER_BACKEND = 'mongodb'
BROKER_HOST = "localhost"
BROKER_PORT = 27017
BROKER_USER = ""
BROKER_PASSWORD = ""
BROKER_VHOST = ""
import djcelery
djcelery.setup_loader()
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个测试tasks.py文件,如下所示:
from celery.decorators import task
@task()
def add(x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
如果我在后台启动芹菜,它似乎正常启动.然后我打开一个python shell并运行以下命令:
>>> from myapp.tasks import add
>>> result = add.delay(5,5)
>>> result
<AsyncResult: …Run Code Online (Sandbox Code Playgroud) 假设您的系统中有一个实体,例如“ Person”,并且您想处理修改各种Person实体的事件。重要的是:
我们有一个使用共享数据库和锁来解决此问题的实现。线程竞争为一个人获取锁,然后在获取锁后按顺序处理事件。我们希望移到消息队列中以避免轮询和锁定,我们认为这将减少数据库的负载并简化使用者代码的实现。
我已经对ActiveMQ,RabbitMQ和HornetQ进行了一些研究,但是我看不到实现这一目标的明显方法。
ActiveMQ支持使用者订阅通配符,但是我没有看到一种将每个队列的并发限制为1的方法。如果可以,那么解决方案将很简单:
ActiveMQ即将结束:您可以进行通配符订阅并启用“独占使用者”,但是这种结合导致单个使用者接收发送到所有匹配队列的所有消息,从而将所有人员的并发性降低为1。我觉得我缺少明显的东西。
问题:
谢谢!
我在linux上创建消息队列时遇到了麻烦.我得到的错误是"无效的参数".我要做的另一件事是代码是Qt项目的一部分.
常见的错误是名称不以(/)开头且arg的数量不正确,但我检查了那些!
这是我正在尝试运行的代码:
#define MQ_TEST_PATH "/test_queue"
#define MQ_MAX_MSG_SIZE 256
#define MQ_MAX_MSG_COUNT 20
struct mq_attr mqAttr;
mqAttr.mq_maxmsg = MQ_MAX_MSG_COUNT;
mqAttr.mq_msgsize = MQ_MAX_MSG_SIZE;
mq_unlink(MQ_TEST_PATH);
mode_t mode = S_IRUSR | S_IWUSR;
int oflags = O_WRONLY | O_CREAT | O_EXCL;
mqd_t mqd;
mqd = mq_open(MQ_TEST_PATH, oflags, mode, &mqAttr);
if(mqd < 0){
perror("Error on open");
qDebug()<<mqd;
return 0;
}
mq_close(mqd);
mq_unlink(MQ_TEST_PATH);
Run Code Online (Sandbox Code Playgroud)
输出:
Error on open: Invalid argument
-1
Run Code Online (Sandbox Code Playgroud) 我必须报告发布到RabbitMQ的消息数量以及RabbitMQ在使用1天内消耗的消息数量.通过使用RabbitMQ提供的REST API,我能够在某个时间间隔获取统计信息的快照. 如何使用相同的REST API 24小时获取数据.
这个错误困扰了我好几个小时.我收到了NullPointerException.问题是这个错误不一致.它发生在我启动应用程序时,但只是偶尔发生.所以我不确定是什么导致它.
我为错误日志的冗长问题道歉,但我找不到另一种询问方式.
错误日志如下:
FATAL EXCEPTION: main
Process: com.myproject.android, PID: 22175
java.lang.NullPointerException
at com.myproject.android.ImageDownloaderThread.queueImage(ImageDownloaderThread.java:74)
at com.myproject.android.NewsItemPagerActivity$NewsItemFragmentStatePagerAdapter.getItem(NewsItemPagerActivity.java:325)
at android.support.v13.app.FragmentStatePagerAdapter.instantiateItem(FragmentStatePagerAdapter.java:109)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
at android.support.v4.view.ViewPager.populate(ViewPager.java:982)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
at android.view.View.measure(View.java:16497)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515) …Run Code Online (Sandbox Code Playgroud) android message-queue background-thread android-handlerthread android-looper
多年来,我一直对此错误感到烦恼。
Fatal Exception: java.lang.IllegalStateException: Unable to create layer for MatchCard_
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Run Code Online (Sandbox Code Playgroud)
并非总是如此,而是经常出现。视图是这样构建的
<?xml version="1.0" encoding="utf-8"?>
<com.soudfa.views.RoundedView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="@integer/match_card_height"
android:layout_gravity="@integer/match_card_card_gravity"
android:transitionGroup="true"
android:layoutDirection="locale"
app:cardPreventCornerOverlap="@bool/match_card_prevent_corner_overlap"
app:corner_radius="@dimen/corner_radius"
app:cardElevation="0dp">
<com.soudfa.fragments.match.views.CustomRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="@integer/match_card_height"
android:layout_gravity="@integer/match_card_card_gravity"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:clipToPadding="false"
android:scrollbars="@integer/match_card_scroll_bar"
android:background="@color/brightest"
android:overScrollMode="never"/>
<FrameLayout
android:id="@+id/leftActionImageContainer"
android:layout_width="@dimen/match_card_decision_icon_size_start"
android:layout_height="@dimen/match_card_decision_icon_size_start"
android:layout_centerVertical="true"
android:layout_alignParentStart="true"
android:alpha="0"
android:background="@drawable/shape_match_decision_icon_like"
android:elevation="@dimen/general_elevation"
android:padding="@dimen/match_card_decision_icon_padding"
android:scaleType="fitCenter"
android:scaleX="0"
android:scaleY="0">
<ImageView
android:id="@+id/leftActionImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tint="@color/custom_match_card_action_positive"/>
</FrameLayout>
<FrameLayout
android:id="@+id/rightActionImageContainer"
android:layout_width="@dimen/match_card_decision_icon_size_start"
android:layout_height="@dimen/match_card_decision_icon_size_start"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:alpha="0" …Run Code Online (Sandbox Code Playgroud)