用 supervisord 吧
那还是用 hg 吧 ...
#58 楼 @undead__king 伸手党到处都有。就好像抄袭到处都有。与其无视他们的存在,不如想办法如何与他们共存。
学学 StackOverflow 吧,只要用虚荣心诱惑一下,越简单的问题就越有人来回答 ...
我觉得专门的问答功能比较好
worker 具体是怎么处理该请求? worker 有多种模式啊。
首先是,类似 Apache 的 prefork 模式,这个其实就是说,你 fork 出多个进程之后,就在子进程分别 select 就行了 (至于为啥可以,你去看操作系统是怎么实现的)。为了避免内存泄漏带来影响,处理比如 1000 个请求后,进程就自杀,这会触发父进程的 signal,父进程于是就 fork 一个新的子进程出来。大致上是这样的,细节你自己看代码吧。
你可以 fork 多个进程也可以不 fork。在单个进程里面,你可以弄个线程池,也可以用协程,或者事件驱动也成啊,当然了,你想让一个进程同时只处理一个请求,那也没问题。
这个请求是进入某一个队列中吗
同上,这个是操作系统干的事情
一个请求在为执行完以前应该会阻塞其它的请求吧
假如你能同时处理的请求数小于实际的请求数,当然可能阻塞。
2 个 worker 是如何处理大量的请求的?还是 fork 子进程来处理大量的请求?
同最上面,这个取决于你的 worker 是怎么实现的。
关于第二条在高并发情况下的问题,应该首先是由 Nginx 或者 Apache 接收到请求,之后再转给上游的 Unicorn
你也可以不用反向代理转发,只要你能撑得住。
前面 Web server 应该也会对大量的请求进行一定的处理吧?
你怎么配置的就会怎么被处理呗。
想起来了。Google F1 http://research.google.com/pubs/pub38125.html 。当需要 JOIN 的时候,你还是需要 RDBMS 的。不然 Google 也不用折腾 F1 出来了。
我觉得很可能是 ActiveRecord 限制了 RoR 开发者的思路,如果非要找原因的话。
我也觉得不该用 MongoDB,当然我也很讨厌 MySQL。
我觉得,导购已经太热了
#8 楼 @ShiningRay 那就 1000 页之前之后分别处理
关键是问答要和普通帖子分开,再用勋章什么的满足一下回答的人的虚荣心。
感觉性能未必会有什么差别吧,因为无论那种方法你都要根据时间排序。
#2 楼 @ShiningRay 有一个在下一页的帖子在你点下一页之前被回复了,这样你就看不到了 ... 相比之下我宁愿选择有重复
论坛的帖子列表只能用页码吧...
建议你看一下 Django 的 Tutorial,第二部分说的就是你现在这个问题。 https://docs.djangoproject.com/en/1.4/intro/tutorial02/
这必须是你用的框架不对。如果只需要后台编辑的话,必须用 Django 的 Admin 搞定。比如像下面这样,10 分钟的事嘛。
events/models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Event(models.Model):
name = models.CharField(_('name'), max_length=255)
class Meta:
verbose_name = _('event')
verbose_name_plural = _('events')
class Meeting(models.Model):
event = models.ForeignKey(Event, related_name='meetings')
start_time = models.DateTimeField()
end_time = models.DateTimeField()
class Meta:
verbose_name = _('meeting')
verbose_name_plural = _('meetings')
ordering = ('start_time', )
events/admin.py
from django.contrib import admin
from events.models import Event, Meeting
class MeetingInline(admin.StackedInline):
model = Meeting
extra = 3
class EventAdmin(admin.ModelAdmin):
inlines = [MeetingInline]
admin.site.register(Event, EventAdmin)
admin.site.register(Meeting)