小编Tre*_*vor的帖子

Selenium Chromedriver挂了?

我有一个长期运行的python应用程序,它将定期(每30-60秒)用selenium和chrome驱动程序打开一个网页,运行一些javascript并截取屏幕截图.它在Xvfb中使用chrome运行的EC2 ubuntu实例上运行,并且大部分内容都正常工作,除了间歇性程序将挂起.它发生在以下其中一条线上:

    options = Options()
    options.add_argument("--disable-web-security")
    options.add_argument("--webdriver-logfile=webdrive.log")
    dc = DesiredCapabilities.CHROME
    dc['loggingPrefs'] = {'browser': 'ALL'}
    driver = webdriver.Chrome(chrome_options=options, desired_capabilities=dc)
    driver.get(url);
Run Code Online (Sandbox Code Playgroud)

(我没有一个确切的行,但我从调试语句中知道我已经把它放在这里介于两者之间)

不幸的是,该程序没有崩溃所以它没有任何错误消息,它只是在昨晚7点以后无休止地等待.运行strace -p 'python program pid'返回:wait4(-1,并运行strace -p 'chromedriver pid'返回recvfrom(20,

我可以看到ps axjf,该过程仍在运行,它只是没有做任何事情.我有点不知道现在该做什么,有什么建议吗?

chromedriver版本:2.10.267518

谷歌浏览器40.0.2214.111

硒(安装有点子):2.42.1

#https://github.com/cgoldberg/xvfbwrapper
xvfb = Xvfb(width=1920, height=1920)
xvfb.start()
Run Code Online (Sandbox Code Playgroud)

----编辑----

我刚才已经更新到ChromeDriver 2.14.313457Selenium 2.44.0,希望这将解决这个问题.我现在要打开这个.感谢你们的建议到目前为止!

----编辑----

所以服务仍然停止了.我想知道这是否是因为我关闭并重新启动google-chrome的每个屏幕截图?这是否可能以某种方式导致内存泄漏?我怎么诊断这个?

python selenium selenium-chromedriver

9
推荐指数
2
解决办法
5891
查看次数

Vim打开一个通过grep找到的文件

所以我正在浏览vim中的文件.我意识到我正在寻找的功能是另一个文件.所以我 :! ack-grep "function tracking" ../去寻找它,我看到我需要检查文件"../../tracking/api/ etc etc"一些非常长的文件名.我现在正在做的是试图记住这个文件,键入fg以返回到vim,然后:e"那个很长的文件名".我想知道是否有更简单的方法来做到这一点?

例如,vim -addtab <some file>一旦我使用ack-grep找到我正在寻找的内容,我可以从命令行执行某些操作,然后当我fg回到vim时,该文件将在一个选项卡中打开吗?

很棒,很多建议.我会像我一样全力以赴和评论.一旦我尝试了所有这些,我会选择最适合我的东西.

所以这就是我确定的功能:

function! s:NewTabGrep(...)
  let args=split(a:1)
  if len(args) == 2
      let dir=args[1]
  else
      let dir='.'
  endif
  echom args[0] . "  " . shellescape(dir)
  tabnew | execute "r ! ack-grep ". shellescape(args[0]) ." ". shellescape(dir) 
endfunction
com! -nargs=? GrepTab call s:NewTabGrep('<args>')
Run Code Online (Sandbox Code Playgroud)

这将执行搜索,并在新的vim选项卡中打开结果.然后我可以使用CtrlP打开最有趣的文件.感谢Merlin2011的灵感.

vim bash grep

7
推荐指数
1
解决办法
1369
查看次数

Java:非阻塞队列上的最大CPU等待

我有以下代码:

public void run() {
    while (true) {
        m = q.poll();
        if (m != null) {
            kf.sendMessage(m.topic, m.message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中q是ConcurrentLinkedQueue.目前这是占用我100%的CPU.有没有更有效的方法来等待非阻塞队列?我更喜欢使用非阻塞队列,因为我期待来自队列中生产者的突发流量,所以我想要最大化性能.如果q.poll()返回null,有没有办法放弃对我的线程的cpu的控制?

我可以选择切换到阻塞队列,但我很好奇这样做的正确方法是什么.

编辑 - 很多好的回应!感谢你的帮助.现在我要切换到一个链接块,如果我开始遇到性能问题重新评估.

java concurrency

5
推荐指数
1
解决办法
990
查看次数

Python Win32API bitmap.GetBitmapBits()

只是一个我无法找到任何细节的快速问题:我正在使用python win32api捕获我的计算机的屏幕截图.我想推出自己的图像压缩算法(为了好玩,我不希望专业级别的结果),但我很难理解我从位图本身获得的像素数据.这是相关代码:

width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc) 

memdc = srcdc.CreateCompatibleDC()                                             

bmp = win32ui.CreateBitmap()    
bmp.CreateCompatibleBitmap(srcdc, width, height)    
memdc.SelectObject(bmp)         


memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) 
bmpinfo = bmp.GetInfo()
bmpInt = bmp.GetBitmapBits(False)
Run Code Online (Sandbox Code Playgroud)

GetBitmapBits(False)返回一个整数数组/元组.但我找不到有关bmpInt如何与像素数据相关的任何信息.输出如下所示:

123,1,-1,-13,-55,2,23,123 ...
Run Code Online (Sandbox Code Playgroud)

这些如何与每个像素的RGB值相对应?每3个像素一个像素?还是有alpha通道?另外,为什么有负数?供参考,这里是文档:http://docs.activestate.com/activepython/2.4/pywin32/PyCBitmap__GetBitmapBits_meth.html 那里没有解释......

python winapi bitmap

3
推荐指数
1
解决办法
1826
查看次数

Vagrant,VirtualBox,Supervisord:何时安装同步文件夹?

我正在使用Supervisord运行虚拟机来启动和维护几个重要的后台进程.我使用vagrant和virtualbox创建虚拟机,并使用puppet进行配置.当机器启动时,supervisord会抓取/etc/supervisor/conf.d中的所有.conf文件并尝试运行它们.不幸的是,当我跑

Vagrant up
Run Code Online (Sandbox Code Playgroud)

在共享同步文件夹之前,supervisord立即开始尝试在conf.d中运行文件.因此,启动一些像Xvfb这样的后台进程运行得很好,但启动我的统计跟踪器(位于同步文件夹中)是不可能的.事实上,我在supervisord日志中看到多次尝试启动该进程,抱怨它无法找到该文件,最后放弃了.然后,一旦机器完全运行,我可以SSH并在.conf文件中运行完全相同的命令并自己启动该过程.

我创建了一个中间脚本来连续循环,等待同步文件夹变为可用,然后启动我想要的进程.但在这种情况下,主管没有办法确保流程继续运行,而且感觉就像是黑客攻击.

有更清洁的方法吗?也许来自傀儡或流浪汉?

virtualbox puppet supervisord vagrant

3
推荐指数
1
解决办法
1673
查看次数