我在Laravel中为我的处理脚本设置了队列.我正在使用beanstalkd和supervisord.有6种不同的管用于不同类型的加工.
问题在于,对于每个管子,工匠每秒都在不断地产生工人.工作者代码似乎睡了1秒然后工作线程使用7-15%cpu,乘以6管......我想每管多个工人......我的cpu被吃掉了.
我尝试将1秒睡眠改为10秒.这有助于但是当工人们醒来时,每10秒仍有一个巨大的CPU峰值.我现在甚至没有处理任何事情,因为队列完全是空的,只是工人正在寻找要做的事情.
当我在浏览器中刷新页面并且徘徊在10%左右时,我还测试了laravel的cpu使用情况.我现在正处于低端机架空间实例,这样可以解释它但仍然......看起来像每当他们醒来时,工人就会开出一个laravel实例.
有没有办法解决这个问题?我是否只需要将更多的钱投入更昂贵的服务器,以便能够听取工作是否准备就绪?
编辑:
找到一个解决方案...它不是使用工匠队列:监听器或队列:工作我查看了队列代码,似乎没有解决这个问题的方法,它需要laravel加载每次工人检查做更多的工作.
相反,我使用pheanstalk编写了自己的监听器.我仍然使用laravel将事物推入队列,然后我的自定义侦听器正在解析队列数据,然后触发一个artisan命令来运行.
现在我的侦听器的cpu使用率在%0以下,我的cpu现在唯一的时间就是当它实际找到工作然后触发命令时,我很好.
对于我的情况,我有一个固定的宽度,我可以在其中显示一个名字。如果名称太长,那么我需要剪辑/隐藏名称。
我遇到的问题是最后一个字母被切成两半,而我只想显示最后一个完整的字母。
在下面的“HelloWorld!”示例中,“W”被切成两半。相反,我需要它忽略该部分字母并只显示“你好”。这甚至可能仅使用 CSS 吗?
.test {
white-space: nowrap;
width: 44px;
overflow: hidden;
text-overflow: clip;
border: 1px solid #000000;
}Run Code Online (Sandbox Code Playgroud)
<div class="test">HelloWorld!</div>Run Code Online (Sandbox Code Playgroud)