Fal*_*nUA 5 python linux jupyter-notebook google-colaboratory
有什么方法可以以编程方式防止Google Colab在超时时断开连接?
下面介绍导致笔记本计算机自动断开连接的情况:
Google Colab笔记本的空闲超时为90分钟,绝对超时为12小时。这意味着,如果用户超过90分钟未与其Google Colab笔记本进行交互,则其实例将自动终止。另外,Colab实例的最大生命周期为12小时。
自然,我们希望自动将最大值从实例中挤出,而不必不断地手动与之交互。在这里,我将假定常见的系统要求:
我要在此指出,这种行为不会违反 Google Colab的使用条款,尽管根据其常见问题解答(我们的常见问题),我们不鼓励这样做(简而言之:从道德上讲,如果您真的不需要用尽所有GPU,就不行了) )。
我当前的解决方案非常愚蠢:
有更好的方法吗?
小智 60
由于现在连接按钮的id变成了“colab-connect-button”,下面的代码可以用来一直点击按钮。
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)
如果仍然如此,这不起作用,请按照以下步骤操作:
function ClickConnect(){
console.log("Clicked on connect button");
document.querySelector("Put ID here").click() // Change id here
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)
小智 33
对我而言,以下示例:
document.querySelector("#connect").click() 或者document.querySelector("colab-toolbar-button#connect").click() 或者document.querySelector("colab-connect-button").click() 正在抛出错误。
我不得不使它们适应以下内容:
版本 1:
function ClickConnect(){
console.log("Connnect Clicked - Start");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
console.log("Connnect Clicked - End");
};
setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)
版本 2: 如果您希望能够停止该功能,这里是新代码:
function ClickConnect(){
console.log("Connnect Clicked - Start");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
console.log("Connnect Clicked - End");
};
setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)
要停止,请致电:
stopClickConnect();
Run Code Online (Sandbox Code Playgroud)
Kav*_*ora 26
嗯,这对我有用 -
在控制台中运行以下代码,它将阻止您断开连接。Ctrl+ Shift + i 打开检查器视图。然后去控制台。
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button#connect").click()
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)
小智 20
使用 pynput 在你的电脑中创建一个 python 代码
from pynput.mouse import Button, Controller
import time
mouse = Controller()
while True:
mouse.click(Button.left, 1)
time.sleep(30)
Run Code Online (Sandbox Code Playgroud)
在您的桌面上运行此代码,然后将鼠标箭头指向任何目录上的(colabs 左侧面板 - 文件部分)目录结构,此代码将每 30 秒继续单击目录,因此它将每 30 秒扩展和收缩一次,因此您的会话不会过期重要 - 你必须在你的电脑上运行这个代码
小智 20
而不是点击连接按钮,我只是点击评论按钮来保持我的会话活跃。(2020 年 8 月)
function ClickConnect(){
console.log("Working");
document.querySelector("#comments > span").click()
}
setInterval(ClickConnect,5000)
Run Code Online (Sandbox Code Playgroud)
Hu *_*ixi 11
借助一些脚本的上述答案可能效果很好。对于没有脚本的恼人断开连接,我有一个解决方案(或一种技巧),尤其是当您的程序必须从您的谷歌驱动器读取数据时,例如训练深度学习网络模型,使用脚本进行reconnect操作是没有用的,因为一次你与你的 colab 断开连接,程序刚刚死了,你应该再次手动连接到你的谷歌驱动器,让你的模型能够再次读取数据集,但脚本不会做那件事。
我已经对其进行了多次测试,并且效果很好。
当您使用浏览器(我使用 Chrome)在 colab 页面上运行程序时,请记住,一旦您的程序开始运行,请勿对您的浏览器进行任何操作,例如:切换到其他网页,打开或关闭其他网页,以及依此类推,只需将它放在那里等待您的程序完成运行,您就可以切换到另一个软件,例如 pycharm 以继续编写您的代码但不切换到另一个网页。我不知道为什么打开或关闭或切换到其他页面会导致 google colab 页面的连接问题,但是每次我尝试打扰我的浏览器时,比如做一些搜索工作,我与 colab 的连接很快就会中断。
小智 9
尝试这个:
function ClickConnect(){
console.log("Working");
document
.querySelector("#top-toolbar > colab-connect-button")
.shadowRoot
.querySelector("#connect")
.click()
}
setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)
也许以前的许多解决方案不再有效。例如,这个波纹管代码继续在 Colab 中创建新的代码单元,尽管如此。毫无疑问,创建一堆代码单元是一种不便。如果在运行的几个小时内创建了太多的代码单元并且没有足够的 RAM,浏览器可能会冻结。
这会反复创建代码单元——
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button").click()
}setInterval(ClickConnect,60000)
Run Code Online (Sandbox Code Playgroud)
但是我发现下面的代码正在运行,它不会引起任何问题。在 Colab notebook 选项卡中,Ctrl + Shift + i同时单击该键并将以下代码粘贴到控制台中。120000个间隔就够了。
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button#connect").click()
}setInterval(ClickConnect,120000)
Run Code Online (Sandbox Code Playgroud)
我已于 2020 年 11 月在 Firefox 中测试了此代码。它也适用于 chrome。
function ConnectButton(){
console.log("Working");
document.querySelector("#connect").click()
}
setInterval(ConnectButton, 60000);
Run Code Online (Sandbox Code Playgroud)
小智 8
设置一个JavaScript间隔,每60秒点击一次连接按钮。使用Ctrl + Shift + I打开开发人员设置(在您的Web浏览器中),然后单击控制台选项卡,然后在控制台提示符下键入此设置。(对于Mac,请按Option + Command + I)
function ConnectButton(){
console.log("Connect pushed");
document.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);
Run Code Online (Sandbox Code Playgroud)
小智 8
我不相信 JavaScript 解决方案不再有效。我是在我的笔记本中使用以下方法进行的:
from IPython.display import display, HTML
js = ('<script>function ConnectButton(){ '
'console.log("Connect pushed"); '
'document.querySelector("#connect").click()} '
'setInterval(ConnectButton,3000);</script>')
display(HTML(js))
Run Code Online (Sandbox Code Playgroud)
当您第一次执行 Run all 时(在 JavaScript 或 Python 代码开始之前),控制台显示:
Connected to
wss://colab.research.google.com/api/kernels/0e1ce105-0127-4758-90e48cf801ce01a3/channels?session_id=5d8...
Run Code Online (Sandbox Code Playgroud)
但是,每次运行 JavaScript 时,您都会看到 console.log 部分,但单击部分只是给出:
Connect pushed
Uncaught TypeError: Cannot read property 'click' of null
at ConnectButton (<anonymous>:1:92)
Run Code Online (Sandbox Code Playgroud)
其他人建议按钮名称已更改为 #colab-connect-button,但这给出了相同的错误。
运行时启动后,按钮变为显示 RAM/DISK,并显示下拉列表。单击下拉菜单会创建一个<DIV class=goog menu...>以前未在 DOM 中显示的新文件,有 2 个选项“连接到托管运行时”和“连接到本地运行时”。如果控制台窗口打开并显示元素,您可以在单击下拉元素时看到此 DIV 出现。只需在出现的新窗口中的两个选项之间移动鼠标焦点即可向 DOM 添加其他元素,一旦鼠标失去焦点,它们就会从 DOM 中完全移除,甚至无需单击。
使用 python 硒
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver')
notebook_url = ''
driver.get(notebook_url)
# run all cells
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.F9)
time.sleep(5)
# click to stay connected
start_time = time.time()
current_time = time.time()
max_time = 11*59*60 #12hours
while (current_time - start_time) < max_time:
webdriver.ActionChains(driver).send_keys(Keys.ESCAPE).perform()
driver.find_element_by_xpath('//*[@id="top-toolbar"]/colab-connect-button').click()
time.sleep(30)
current_time = time.time()
Run Code Online (Sandbox Code Playgroud)
您可以为笔记本添加书签以使其保持连接状态:
function ClickConnect(){
console.log("Clicked on star button");
document.querySelector("iron-icon#star-icon").click()
}
setInterval(ClickConnect, 60000)
Run Code Online (Sandbox Code Playgroud)
现在你每分钟都能看到星星的闪烁。
YouTube 视频“如何防止 Google Colab 断开连接 | 一个简单的解决方案”中的解决方案对我有用。
安装 pynput 库,它允许您控制和监视输入设备。
pip install pynput
Run Code Online (Sandbox Code Playgroud)
现在在本地计算机上执行此代码,并将鼠标光标放在正在运行的 Colab 笔记本中的空单元格中。
from pynput.mouse import Controller,Button
import time
mouse = Controller()
while True:
mouse.click(Button.left,1)
print('clicked')
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
小智 6
我尝试了上面的代码,但它们对我不起作用。所以这是我用于重新连接的 JS 代码。
let interval = setInterval(function(){
let ok = document.getElementById('ok');
if(ok != null){
console.log("Connect pushed");
ok.click();
}},60000)
Run Code Online (Sandbox Code Playgroud)
您可以使用相同的方式(在浏览器的控制台上运行)来运行它。如果要停止脚本,可以输入clearInterval(interval)并希望再次运行setInterval(interval)。
我希望这可以帮助你。
小智 5
这对我有用(看起来他们更改了按钮类名或 ID):
function ClickConnect(){
console.log("Working");
document.querySelector("colab-connect-button").click()
}
setInterval(ClickConnect,60000)Run Code Online (Sandbox Code Playgroud)
更新了一张。这个对我有用。
function ClickConnect(){
console.log("Working");
document.querySelector("paper-icon-button").click()
}
Const myjob = setInterval(ClickConnect, 60000)Run Code Online (Sandbox Code Playgroud)
如果对你们不起作用,请尝试通过运行来清除它:
clearInterval(myjob)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |