我有一个具有以下服务的应用程序:
web/ - 在端口5000上保存并运行python 3 flask Web服务器.使用sqlite3.worker/- 有一个index.js文件,它是队列的工作者.Web服务器使用json API over port与此队列交互9730.工人使用redis进行存储.工作人员还将数据本地存储在文件夹中worker/images/现在这个问题只涉及到了worker.
worker/DockerfileFROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
Run Code Online (Sandbox Code Playgroud)
docker-compose.ymlredis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
Run Code Online (Sandbox Code Playgroud)
当我运行时docker-compose build,一切都按预期工作,所有npm模块都/worker/node_modules按照我的预期安装.
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时docker-compose up,我看到了这个错误:
worker_1 …Run Code Online (Sandbox Code Playgroud) 我试图为教程安装postgres,但是pip给了我错误:
pip install psycopg
Run Code Online (Sandbox Code Playgroud)
我得到一个错误:
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
Run Code Online (Sandbox Code Playgroud)
pg_config我的virtualenv 在哪里?如何配置?我正在使用virtualenv,因为我不想在系统范围内安装postgres.
在我的models/user.js档案中:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({
(define schema)
});
...
(save user)
...
(check password)
...
mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
在我router/index.js,我有:
var mongoose = require('mongoose');
var User = mongoose.model('User');
Run Code Online (Sandbox Code Playgroud)
抛出错误:
MissingSchemaError: Schema hasn't been registered for model "User".
Run Code Online (Sandbox Code Playgroud)
但是,如果user.js,我(在最后一行)
module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
在index.js我这样做var User = require('../models/User');,然后一切正常.
但它不应该,因为config/pass.js我正在做,var User = mongoose.model('User');而且它的工作完美无瑕.
该require('../models/User');语法不工作在Ubuntu,但在我的Mac.
我该怎么办?我如何解决它?我看了很多样本应用程序,包括MEAN,但没有什么是真正有用的.
所以我试图使用Python登录Quora,然后刮掉一些东西.
我正在使用Selenium登录该网站.这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://www.quora.com/')
username = driver.find_element_by_name('email')
password = driver.find_element_by_name('password')
username.send_keys('email')
password.send_keys('password')
password.send_keys(Keys.RETURN)
driver.close()
Run Code Online (Sandbox Code Playgroud)
现在的问题是:
找到并填写登录表单需要大约4分钟,这非常缓慢.我能做些什么来加快这个过程吗?
登录时,如何确保没有错误?换句话说,我如何检查响应代码?
如何用硒保存饼干,以便我可以在登录后继续抓取?
如果没有办法让硒更快,那还有其他的登录方式吗?(Quora没有API)
所以我开始使用express.js - 我的第一个JS web开发框架.我没有做任何小事,但开始了一个更大的项目.我正在学习,并在同一时间建设.
来自Python/Flask背景,express似乎非常复杂.
就像在python中一样,如果我想要一个帮助器方法,我可以把它放在文件的顶部,或者放在一个新模块中,然后导入它.超级容易.但是在node/express中,事物是异步的,一切都在exports或module.exports(??).辅助方法在哪里?我怎么用回调来打电话给他们?
在我问的另一个问题中,我多次进行同样的计算.在Python中,我会编写一个方法(使用if语句和参数),并使用for.. in...循环多次调用它.我现在的代码非常冗余.
我怎么做快递?编写快速代码的最佳做法是什么?
我正在尝试一种算法来解决我遇到的这个问题.这不是硬件问题,而是我正在研究的一个副项目.
有一个表A大约有10 ^ 5行的顺序,并且每天以10 ^ 2的顺序添加新的.
表B具有10 ^ 6行的顺序,并且每天以10 ^ 3添加新的.从A到B有一对多关系(A中某些行有很多B行).
我想知道如何为这种数据进行连续聚合.我希望每隔约10分钟运行一次这样的工作并执行此操作:对于A中的每一行,查找在最后一天,一周和一个月中创建的B中与其相关的每一行(然后按计数排序)并保存他们在不同的数据库或缓存他们.
如果这令人困惑,这里有一个实际的例子:Say表A有亚马逊产品,表B有产品评论.我们希望显示最近4小时,每天,每周等评价最高的产品的分类列表.新产品和评论会快速添加,我们希望上述列表为最新版本尽可能.
我当前的实现只是一个for循环(伪代码):
result = []
for product in db_products:
reviews = db_reviews(product_id=product.id, create>=some_time)
reviews_count = len(reviews)
result[product]['reviews'] = reviews
result[product]['reviews_count'] = reviews_count
sort(result, by=reviews_count)
return result
Run Code Online (Sandbox Code Playgroud)
我每小时都这样做,并将结果保存在json文件中以供服务.问题是这不能很好地扩展,并且需要很长时间来计算.
那么,我在哪里可以解决这个问题呢?
更新:
谢谢您的回答.但我最终学习并使用Apache Storm.
>>> from Tkinter import tkMessageBox
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
from Tkinter import tkMessageBox
ImportError: cannot import name tkMessageBox
Run Code Online (Sandbox Code Playgroud)
我收到此错误,即使from Tkinter import *工作正常.我使用的是Python 2.7.5.
我正在尝试使用mechanize模块登录quora.com.
这是我的代码:
#!/usr/bin/env python
import mechanize
import cookielib
br = mechanize.Browser() # create a browser object
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_headers = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)')]
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
res = br.open('http://www.quora.com')
br.select_form(nr = 0)
br.form['email'] = 'uuuu'
br.form['password'] = 'pppp'
res = br.submit()
print res.read()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last):
File "mech.py", line 29, in <module>
res = br.submit()
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 541, in submit
return self.open(self.click(*args, **kwds))
File …Run Code Online (Sandbox Code Playgroud) 我绘制时间序列的代码是这样的:
def plot_series(x, y):
fig, ax = plt.subplots()
ax.plot_date(x, y, fmt='g--') # x = array of dates, y = array of numbers
fig.autofmt_xdate()
plt.grid(True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我有几千个数据点,所以matplotlib创建3个月的x轴范围.这就是我现在的时间序列:

但是,我想要每周/每两周播放一次.如何更改matplotlib计算x轴日期范围的方式,由于我有近1年的数据,如何确保所有数据都能很好地适用于单个图表?
我现在开始使用Express,并希望显示一条简单的flash错误消息,这只是无法正常工作.
app.js
var flash = require('connect-flash');
...
var app = express(); // create an express app
// configure environments
app.configure(function(){
...
app.use(express.cookieParser('keyboard cat'));
app.use(express.session({ cookie: { maxAge: 60000 }}));
app.use(flash());
app.use(app.router);
});
app.get('/signup', routes.signup);
app.post('/signup', routes.adduser);
...
Run Code Online (Sandbox Code Playgroud)
和我的 router.js
exports.signup = function(req, res) {
console.log(req.flash('error'));
res.render('signup', {message: req.flash('error')});
}
Run Code Online (Sandbox Code Playgroud)
和
exports.adduser = function(req, res) {
// get the form values from "name" attribute
var username = req.body.username;
var email = req.body.useremail;
var password = req.body.userpassword;
User.findOne({'username': username}, function(err, user) { …Run Code Online (Sandbox Code Playgroud) python ×7
node.js ×4
express ×3
javascript ×3
http ×2
aggregate ×1
cron ×1
docker ×1
heroku ×1
instance ×1
macos ×1
matplotlib ×1
mechanize ×1
mongoose ×1
mysql ×1
newrelic ×1
postgresql ×1
psycopg2 ×1
pug ×1
python-2.7 ×1
quora ×1
selenium ×1
time-series ×1
tkinter ×1
ubuntu-14.04 ×1