C函数myfunc
在更大的数据块上运行.结果以块的形式返回给回调函数:
int myfunc(const char *data, int (*callback)(char *result, void *userdata), void *userdata);
Run Code Online (Sandbox Code Playgroud)
使用ctypes,myfunc
从Python代码调用并将结果返回给Python回调函数没什么大不了的.这个回调工作正常.
myfunc = mylib.myfunc
myfunc.restype = c_int
myfuncFUNCTYPE = CFUNCTYPE(STRING, c_void_p)
myfunc.argtypes = [POINTER(c_char), callbackFUNCTYPE, c_void_p]
def mycb(result, userdata):
print result
return True
input="A large chunk of data."
myfunc(input, myfuncFUNCTYPE(mycb), 0)
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法将Python对象(比如列表)作为用户数据提供给回调函数?为了存储结果块,我想做例如:
def mycb(result, userdata):
userdata.append(result)
userdata=[]
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将Python列表转换为c_void_p,以便可以在调用myfunc时使用它.
我目前的解决方法是将链表实现为ctypes结构,这非常麻烦.
所以我正在尝试使用Packer创建AWS映像并通过user_data_file指定一些用户数据.实例启动时需要运行此文件的内容,因为每次实例都是唯一的.我不能把它加入AMI.
使用打包器我有以下内容:
{
"variables": {
"ami_name": ""
},
"builders": [
{
"type": "amazon-ebs",
"region": "us-east-1",
"source_ami": "ami-c8580bdf",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "{{ user `ami_name` }}-{{ isotime | clean_ami_name }}",
"user_data_file": "user_data.sh",
"tags": {
"os_version": "ubuntu",
"built_by": "packer",
"build_on": "{{ isotime | clean_ami_name }}",
"Name": "{{ user `ami_name` }}"
}
}],
"provisioners": [
{
"type": "ansible",
"playbook_file": "playbook.yml",
"user": "ubuntu"
}]
}
Run Code Online (Sandbox Code Playgroud)
我的user_data shell脚本的内容只是通过在供应商步骤中运行的ansible脚本安装的软件包的几个基本配置行.观察Packer的输出我可以确认ansible脚本全部运行.
Packer完成并创建AMI,但永远不会执行用户数据.结果图像中不存在任何记录.没有/userdata.log文件并且/var/lib/cloud/instance/user-data.txt
是空的我觉得我错过了一些基本的东西,因为这应该是一个非常简单的事情与Packer.
我试图通过boto的ec2.run_instances(...,user_data = USER_DATA)将用户数据加载到Ubuntu 12.04 LTS AMI(ami-a29943cb,但我尝试过其他一些无效).同样,我在通过AWS控制台启动实例时手动提供用户数据也没有成功.对于我尝试过的任何方法,/ var/logs/syslog中都没有结果或消息.
USER_DATA类似于以下内容,从文件中读取为字符串:
#!/usr/bin/env python
import boto
AWS_BOOTSTRAP_BUCKET = ''
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
# Pull processing script from S3.
print 'Bootstrapping started.....'
print 'Connecting to S3...'
s3 = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = s3.get_bucket(AWS_BOOTSTRAP_BUCKET)
print 'Downloading bootstrap file...'
key = bucket.get_key('xxx')
key.get_contents_to_filename('xxx')
print 'Importing Bootstrap file...'
import xxx
xxx.process()
# Shut down the EC2 instance running this process.
print 'Shutting down this instance...'
import socket
desired_hostname = socket.gethostname()
ec2 = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
reservations …
Run Code Online (Sandbox Code Playgroud) 我最近注意到 Terraform 或 AWS 更改了 EC2 用户数据,以便更改不会触发 terraform 中的“替换”。引用 Terraform aws_instance文档:对此字段的更新将触发 EC2 实例的停止/启动。
我们有自动化部署,依靠用户数据更改来触发替换,以便每次都运行新的用户数据。
有没有一种方法可以告诉 Terraform 替换实例是否注意到新的用户数据?Lambda 有一个类似的问题,可以通过“source_code_hash”解决。我可以在这里使用类似的东西吗?
谢谢。
amazon-ec2 amazon-web-services user-data terraform terraform-provider-aws
我正在制定一项调查计划,让人们在第一次填写调查时会获得促销考虑.在很多情况下,我们阻止人们欺骗系统并获得他们不应该得到的促销的唯一方法是检查彼此之间的街道地址字符串.
我正在考虑使用levenshtein距离给我一个数字来衡量相似性,并认为低于某个阈值的数字是重复的.
然而,如果有人想要对系统进行游戏,他们可以轻松地编写"S 5th St"而不是"South Fifth Street",levenshtein会认为这些字符串非常不同.那么我想把所有字符串转换为'标准地址形式',即'South'变成's','Fifth'变成'5th'等等.
然后我认为这是无望的,并且需要付出太多努力才能使其稳健运行.是吗?
我正在使用PHP/MySql,所以我有该系统固有的局限性.
我认为这项工作很容易,但我无法理解为什么我的NSMutableDictionary属性不能像我预期的那样工作.
[self.testSprite.userData setValue:@"CAT" forKey:@"key"];
NSLog(@"%@", [self.testSprite.userData objectForKey:@"key"]);
NSLog(@"%lu", [self.testSprite.userData count]);
Run Code Online (Sandbox Code Playgroud)
我重新调整(null)和0.
有没有使用spriteNode userdata的特殊技巧?
谢谢
以下哪种方法被认为是在用户会话期间将数据存储在grails中的推荐方法?
在 Three.js 中,类上有一个Object3D
名为 userData 的字段,它在类型声明文件中node_modules/three/src/core/Object3D.d.ts
定义为
/**
* Base class for scene graph objects
*/
export class Object3D extends EventDispatcher {
[...]
/**
* An object that can be used to store custom data about the Object3d. It should not hold references to functions as these will not be cloned.
* @default {}
*/
userData: { [key: string]: any };
[...]
}
Run Code Online (Sandbox Code Playgroud)
我想对 userData 进行更强的类型化,因此我创建了一个模块类型声明src/typings/three.d.ts
:
declare module 'three' {
export class Object3D {
userData: MyType1 …
Run Code Online (Sandbox Code Playgroud) 我需要传递userData
给jqgrid,但找不到任何如何执行此操作的示例.这是我的尝试:
从服务器发送:
{ total: 25,
page: currentpage,
userData: {foo: 'bar'},
rows: myRows }
Run Code Online (Sandbox Code Playgroud)
在jqgrid中:
var data = jQuery("#grid").getGridParam('userData');
Run Code Online (Sandbox Code Playgroud)
如何userData
从jqgrid 发送和读取它?
编辑:我知道我userData
被送了,因为我可以在Fiddler看到它.我想我只是坚持如何在客户端阅读它.
我有 Zookeeper 连接为 ip1:port1,ip2:port2,ip3:port3 我想在我的用户数据中使用它我该怎么做?
"ZooKeeperConnect": {
"Type": "String",
"Description": "list of IP or CNAME's for the associated zookeeper ensemble",
"AllowedPattern": "([1-9][0-9]?|[1-2][0-9]{2})(\\.([1-9][0-9]?|[1-2][0-9]{2})){3}(:[1-9][0-9]{1,4})?(,([1-9][0-9]?|[1-2][0-9]{2})(\\.([1-9][0-9]?|[1-2][0-9]{2})){3}(:[1-9][0-9]{1,4})?)*"
}
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash \n",
"echo Cache proxy vars... \n",
Run Code Online (Sandbox Code Playgroud)
我想在我的用户数据中使用 ZooKeeperConnect 值
user-data ×10
amazon-ec2 ×3
python ×2
.d.ts ×1
algorithm ×1
callback ×1
controller ×1
ctypes ×1
domain-model ×1
extend ×1
grails ×1
jqgrid ×1
jquery ×1
json ×1
packer ×1
parameters ×1
session ×1
sprite ×1
sprite-kit ×1
terraform ×1
three.js ×1
typescript ×1
ubuntu ×1