小编Anu*_*raz的帖子

flask_sqlalchemy `pool_pre_ping` 有时只工作

为了测试,我将MYSQL(RDS)参数修改如下;

wait_timeout = 40(默认为 28800)

max_allowed_pa​​cket = 1GB(最大 - 只是为了确保问题不是由小数据包引起的)

net_read_timeout = 10

Interactive_timeout 不变

然后在没有pool_pre_ping设置选项的情况下测试我的应用程序(默认为 False),使应用程序保持非活动状态 40 秒,尝试登录,然后我得到

Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: Traceback (most recent call last):
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:     context)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 507, in do_execute
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:     cursor.execute(statement, parameters)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]:   File "/var/www/api_server/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
Nov 14 20:05:20 …
Run Code Online (Sandbox Code Playgroud)

python mysql connection-pooling flask flask-sqlalchemy

42
推荐指数
2
解决办法
3398
查看次数

如何使用额外文件进行 AWS 粘合作业

我有一个用 python 编写的 ETL 作业,它由具有以下目录结构的多个脚本组成;

\n\n
my_etl_job\n |\n |--services\n |  |\n |  |-- __init__.py\n |  |-- dynamoDB_service.py\n |\n |-- __init__.py\n |-- main.py\n |-- logger.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

main.py是从上述目录导入其他脚本的入口点脚本。上面的代码上传到由 dev 端点创建的 ETL 集群后,在 dev-endpoint 上运行得非常好。既然现在我想在生产中运行它,我想为它创建一个合适的粘合作业。my_etl_job但是当我以format压缩整个目录时.zip,将其上传到 artifacts s3 存储桶中,并将 .zip 文件位置指定到脚本位置,如下所示

\n\n
s3://<bucket_name>/etl_jobs/my_etl_job.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在胶水作业 UI 仪表板上看到的代码;

\n\n
PK\n    \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdP__init__.pyUX\xef\xbf\xbd\'\xef\xbf\xbd^"\xef\xbf\xbd^A\xef\xbf\xbd\xef\xbf\xbd)PK#7\xef\xbf\xbdP  logger.pyUX\xef\xbf\xbd\xef\xbf\xbd^1\xef\xbf\xbd\xef\xbf\xbd^A\xef\xbf\xbd\xef\xbf\xbd)]\xef\xbf\xbdMk\xef\xbf\xbd0\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbda\xef\xbf\xbd&v+\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdA\xef\xbf\xbdB\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd`x\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdq\xef\xbf\xbd\xef\xbf\xbd} ...AND ALLOT MORE...\n
Run Code Online (Sandbox Code Playgroud)\n\n

似乎胶水作业不接受 .zip 格式?如果是,那么我应该使用什么压缩格式?

\n\n

更新: \n我检查了粘合作业可以选择接受额外的文件,Referenced files path其中我提供了上述文件的所有路径的逗号分隔列表,并将 script_location 更改为仅引用main.py文件路径。但这也没有奏效。粘合作业抛出错误 no module found logger (我在 logger.py 文件中定义了这个模块)

\n

python amazon-s3 aws-glue

17
推荐指数
2
解决办法
3万
查看次数

多对多,三张表相互关联(SqlAlchemy)

我有三个表用户、设备和角色。我像这样创建了一个多对多关系 b/w User 和 Device;

#Many-to-Many relation between User and Devices
userDevices = db.Table("user_devices",
                       db.Column("id", db.Integer, primary_key=True),
                       db.Column("user_id", db.Integer, db.ForeignKey("user.id")),
                       db.Column("device_id", db.Integer, db.ForeignKey("device.id"))))

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(60), index=True, unique=True)
    devices = db.relationship("Device", secondary=userDevices, backref=db.backref('users'), lazy="dynamic")

class Device(db.Model):
    __tablename__ = 'device'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(60), unique=True)
Run Code Online (Sandbox Code Playgroud)

这很安静。我可以将设备分配d1给用户u1> d1.users.append(u1),将用户分配给设备 >u1.devices.append(d1)db.session.commit()

我想要更多的是user_devices用一列扩展表,作为role_id角色表的外键。以便此表user_devices将清楚地描述一个Role特定User于特定的Device …

python many-to-many sqlalchemy flask-sqlalchemy

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

在单独的线程中运行 pyQT GUI 主应用程序

我正在尝试在我已经建立的应用程序中添加 PyQt GUI 控制台。但 PyQt GUI 会阻止整个应用程序,使其无法完成其余工作。我尝试使用 QThread,但这是从 mainWindow 类调用的。我想要的是在单独的线程中运行 MainWindow 应用程序。

def main()
      app = QtGui.QApplication(sys.argv)
      ex = Start_GUI()
      app.exec_()  #<---------- code blocks over here !

      #After running the GUI, continue the rest of the application task
      doThis = do_Thread("doThis")
      doThis.start()
      doThat = do_Thread("doThat")
      doThat.start()
Run Code Online (Sandbox Code Playgroud)

我的应用程序已经使用 Python 线程,所以我的问题是,以线程形式实现此过程的最佳方法是什么。

python user-interface multithreading pyqt pyqt4

4
推荐指数
1
解决办法
8730
查看次数

python中的RSA加密和JS中的解密

我是密码学的全新人物.我想从服务器端生成RSA密钥对,并将其发送给所有客户端(浏览器).但在此之前,我只是通过加密python中的数据并通过pubnub发送到index.html文件并尝试在JavaScript中解密来测试场景.问题是当我做加密时;

random_generator = Random.new().read
key = RSA.generate(1024, random_generator)
print key.exportKey() #<--private key
public_key = key.publickey()
print public_key.exportKey() #<--public key
msg = "hello"
enc_data = public_key.encrypt(msg, 32)
print '----ENCRYPTED DATA----'
enc = enc_data[0] 
Run Code Online (Sandbox Code Playgroud)

并发送加密数据enc,它给我这个错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xc4 in position 2: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

我试着把它转换成

enc = base64.b64encode(enc_data[0])
Run Code Online (Sandbox Code Playgroud)

它发送没有错误.但JS解密方法获取无

  var enc_from_python = $('#input').val();
  console.log("ENCRYPTED data:", enc_from_python);
  var decrypt = new JSEncrypt();
  decrypt.setPrivateKey($('#privkey').val());
  var uncrypted = decrypt.decrypt(enc_from_python);
  console.log(">>>",uncrypted);  //<-- this is None ! why ?
Run Code Online (Sandbox Code Playgroud)

这两个代码都可以自己进行加/减.我还尝试使用python中收到的密钥对来加密/解析JS中的数据,这很有效.我想问题是来自Pycrypto的编码数据的unicode编码格式不匹配.谁能告诉我在这里我错过了什么.

Python的完整代码:

import time …
Run Code Online (Sandbox Code Playgroud)

python encryption rsa pycrypto jsencrypt

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

如何在Elixir中更新函数内部的布尔变量

我是Elixir的新手,很难更新变量。需要一些帮助。我有两张地图

firstMsg = %{msg: "Hello", vt: %{"p1" => 1, "p2" => 1, "p3" => 1}, from: "p3"}
state    = %{ :name => "p2",
               vector: %{"p1" => 0, "p2" => 0, "p3" => 0},
               participants: ["p1","p3","p2"]
            } 
Run Code Online (Sandbox Code Playgroud)

我在函数中传递了这两个映射,根据某些条件,该函数应该返回true或false。

defmodule Testfunc do 
 def keep_in_pending(firstMsg, state) do
  if (firstMsg.vt[firstMsg.from] == state.vector[firstMsg.from] + 1) do
     #IO.puts("Origin proc clock is 1 step ahead from rcvd process Origin clk")
     checking = false  #initially set this to false
     for n <- state.participants do
        if n != firstMsg.from …
Run Code Online (Sandbox Code Playgroud)

variables recursion scope functional-programming elixir

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

在Terraform中使用`execute`插值声明一个变量

我想将一个变量的子字符串声明为另一个变量。我测试了使用terraform控制台获取子字符串。

> echo 'element(split (".", "10.250.3.0/24"), 2)' | terraform console
> 3
Run Code Online (Sandbox Code Playgroud)

我的子网是10.250.3.0/24,我希望我的虚拟机在此子网掩码10.250.3.6中获得私有IP地址。我希望通过查看子网地址来自动分配该地址。我尝试过的

测试文件

variable subnet {
  type = "string"
  default = "10.250.3.0/24"
  description = "subnet mask myTestVM will live"
}

variable myTestVM_subnet {
  type = "string"
  default = "10.250." ${element(split(".", var.trusted_zone_onpremises_subnet), 2)} ".6"
}
Run Code Online (Sandbox Code Playgroud)

然后我通过测试

terraform console
>Failed to load root config module: Error parsing /home/anum/test/test.tf: At 9:25: illegal char
Run Code Online (Sandbox Code Playgroud)

我想这只是简单的语法问题。但不知道是什么!

terraform

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