草庐IT

非阻塞

全部标签

python - 等待 gevent socket 和 redis 阻塞 blpop

我正在使用geventStreamServer来处理来自客户端的传入连接。客户端连接后,客户端会向服务器端发送一些消息,服务器端会进行处理。这边一切正常。但有时服务器也会将消息发送回特定的客户端。我会用redis来做这个。我创建了一个以特定客户端ID作为键的队列。客户端发送消息后,我检查队列,如果有任何消息,我将其发送回客户端。这种方法的缺点是,服务器只能在客户端发送消息后发送消息。有没有办法既等待传入数据又等待redisblpop,这样我就可以在消息准备好后立即将消息发送回客户端,而不是等到客户端发送下一个数据?importgeventfromgeventimportsocketfr

ruby-on-rails - 转移到 VPC 后,blpop 阻塞的时间比 Rails 进程中的超时时间长得多

我的超时时间为3秒,预计blpop最多只会挂起3秒,但我的Rails进程随机挂起的时间比这更长,有时长达500秒。挂起的代码是:...iftimeout#equals3#blockingmodequeue.redis.blpop(*slot_keys,timeout)else...我使用的是redisgem,版本3.0.4。关于如何调试这个的任何建议?附带说明一下,在我们将流程移至Amazon的VPC后,这个问题开始出现。 最佳答案 虽然没有记录,但您等待时间超过所需时间的原因是您没有正确传递阻塞超时。正确的方法调用:queue.r

python - scrapy 被 redis 阻塞

我用一个scrapyspider作为消费者,还有一个生产者生产url,不定期放到redis中,我的代码如下:defstart_requests(self):formsginself.redis_sub.listen():data=json.loads(msg['data'].decode('utf-8'))id=data['id']styleUrl=data['styleUrl']pageCount=data['pageCount']self.obi.public(json.dumps({'id':id,'isSynchronized':1}))yieldSplashRequest(u

node.js - 是否有用于 node.js 的阻塞 redis 库?

Redis非常快。在我的机器上,它的大部分速度与node.js中的原生Javascript语句或函数调用一样快。在node.js中编写常规Javascript代码很容易/无痛,因为不需要回调。我不明白为什么使用node.js在Redis中获取/设置键/值数据不那么容易。假设node.js和Redis在同一台机器上,是否有任何npm库允许使用阻塞调用与node.js上的Redis交互?我知道这必须是与V8接口(interface)的C/C++库。 最佳答案 我想你想确保所有的redis插入操作都已执行。为此,您可以使用MULTI命令插

caching - redis持久化是否阻塞读写请求

我正在使用redis并在特定时间间隔内将数据保存到磁盘。我通常看到Redis的读写时间是0.2毫秒的量级,但我很少看到30毫秒的量级。我读到redisfork一个后台进程将数据写入磁盘,fork发生在同一个(redis使用单线程来服务所有请求)线程上,该线程服务于读取和写入请求。如果这是真的,我想要一个解决方案,使持久性不会增加读取和写入请求的延迟。 最佳答案 如果您发出BGSAVE,后台保存将fork。当然,操作系统需要有一个惰性的独立CPU线程可用,因为这不会影响Redis服务器的主线程。如果您在redis.conf中配置sav

mongodb - 在 MongoDB 中执行 compact 时究竟阻塞了什么?

当在MongoDB分片上的集合上运行新的2.0+紧凑命令时,文档说命令在紧凑运行时被阻止。我的问题是,到底什么被阻止了?仅针对该分片上的该集合发出命令?集群中该集合的所有命令?所有操作,无论该分片上的集合如何?等等……有人知道吗?我认为这只是针对该分片上的该集合的命令,因为在一个分片上压缩一个集合在理论上应该独立于其他分片,因此分片点。谢谢,贾斯汀 最佳答案 通常您在辅助节点上运行压缩,因为压缩是按节点进行的,而不是集群中的按集合进行的。运行时,节点处于恢复状态。因此,它不可用于处理任何读取或写入。您可以在rs.status()中看

mysql - 执行大型查询时 Phpmyadmin 阻塞

我正在使用phpmyadmin进行MySQL管理。当我进行耗时耗力的查询(需要几分钟)时,phpmyadmin似乎阻止了其他选项卡中正在进行的所有其他事件。我仍然可以使用mysql控制台进行查询,但我不能再在任何选项卡中使用phpmyadmin,它仅在另一个选项卡中的大查询完成时加载并完成。我能以某种方式改变它吗? 最佳答案 那是因为php处理session的方式。一次只能由一个脚本使用一个session。在一个浏览器中,所有选项卡都使用相同的session,因此它们必须等待任务完成。如果您在另一个浏览器中登录到phpMyAdmin

java - jboss wildfly 数据源连接失败 - 在配置的阻塞超时内没有可用的托管连接

我有一个jbosswildfly服务器通过应用服务器上配置的数据源连接到mysql数据库。有时mysql数据库在一段时间内无法访问(网络问题等...),当mysql无法访问时,我会在日志中收到消息:09:42:30,015ERROR[org.jboss.seam.async.AsynchronousExceptionHandler](4pm_services_QuartzScheduler_Worker-4)Exceptionthrownwhilstexecutingasynchronouscall:java.lang.RuntimeException:javax.persistenc

ios - UIWebView 在 AJAX 中加载内容会阻塞主线程

我在加载页面的模式viewController中使用webview。该页面最多可能需要10秒才能以AJAX加载其内容。如果在页面完全加载后关闭模态viewController,一切看起来都很好。但是,如果我在加载页面时关闭模态viewController,则UI将完全锁定。我在UI锁定时暂停了调试,这是主线程中发生的事情:Thread1,Queue:com.apple.main-thread#00x390b6fa8in__psynch_mutexwait()#10x3911bf50in_pthread_mutex_lock()#20x366ac60cin_WebTryThreadLoc

iphone - 可达性代码阻塞主线程

我目前正在开发一款需要我检查可达性的应用。因此,我开始查找资料并找到了DDG和Apple的代码。我决定使用Apple最新的可达性代码。我导入了它,并且按照Apple样本中的建议,我想到了以下注册方式:[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(notificationHandler:)name:kReachabilityChangedNotificationobject:nil];//checkforlocalconnectionandstartnotifierclient=[[Reach